2015-07-06 5 views
1

У меня есть JSON, и я хочу прочитать заголовок и ссылку внутри элемента с помощью Javascript.Javascript для чтения вложенных элементов Json

{ 
    "rss": { 
     "version": "2.0", 
     "content": "http://purl.org/rss/1.0/modules/content/", 
     "channel": { 
      "title": " National", 
      "pubDate": "Mon, 06 Jul 2015 10:56:29 +1000", 
      "lastBuildDate": "Mon, 06 Jul 2015 10:56:29 +1000", 

      "generator": "news_national_3354", 
      "ttl": "5", 
      "item": [ 
       { 
        "title": "Australia’s biggest housing demolition begins", 
        "link": "http://www.news.com.au/lifestyle/health/mr-fluffy-housing-demolitions-begin/story-fneuzlbd-1227430208115?from=public_rss", 
       }, 
       { 
        "title": "Barnaby Joyce pulls out of Q&A", 
        "link": "http://www.news.com.au/national/barnaby-joyce-pulls-out-of-scheduled-qa-appearance/story-fncynjr2-1227429015164?from=public_rss", 

       }, 
       { 
        "title": "Children who murder parents", 
        "link": "http://www.news.com.au/national/crime/one-parent-is-killed-a-month-by-their-child-crime-statistics-reveal/story-fns0kb1g-1227428117585?from=public_rss", 

       } 


      ] 
     } 
    } 
} 

Я не хочу использовать PHP. Я читаю Xmls с другого сервера домена, и я получал Cross Domain Error. Я нашел this решение для конвертирования xml в JSON. Я могу прочитать xml из другого домена и получить его как JSON. Является ли это решение достаточно эффективным для использования в живом проекте, или я не должен использовать Javascript для извлечения XML-файлов с другого сервера. Пожалуйста, посоветуйте мне в этом вопросе. Благодаря

+0

** JSONP ** возможно, что вы ищете, чтобы справиться с междоменным доступом. –

ответ

1

Вопросы «эффективность» несколько спорным, поскольку возникает вопрос о том, что мы подразумеваем под «эффективностью»?

Является ли получение JSON над XML более эффективным? Конечно, да. JSON на это определение больше подходит для JavaScript, потому что ... ну давайте взглянем на имя:

javascript object nation

Между тем мало думать касаемо стороне клиента. Как отметил here есть более важные аспекты, которые следует учитывать, а именно:

а) Использование сжатия HTTP б) Оптимизация наценки для запроса

Чтобы дать Вам another perspective:

In my humble opinion what makes JSON the natural choice for a lot of applications is not its inherent qualities, though real as demonstrated in the above article, but its strong integration into the web ecosystem because JSON is the native way of representing JavaScript objects trees.

И есть мало что можно добавить отсюда. Вопрос в основном касается того, откуда вы извлекаете информацию. Javascript работает на стороне клиента, поэтому не стоит разбирать его и преобразовывать в JSON. Хотя, если вы используете JSON напрямую, вы можете удалить этот синтаксический анализ. Но вполне нормально использовать XML в такой ситуации, ведь именно поэтому он был создан, поэтому он определенно является жизнеспособным вариантом. В конечном итоге это сводится к вопросу о том, как важна производительность и масштабируемость. Если вы настроите сервис для доставки JSON с самого начала, вам будет легче, если вы хотите масштабировать, поскольку я бы сказал, что генерация XML сложнее, не говоря уже о необходимости разбирать его в любом случае. Но в нарочно показать вам два противоречащих друг другу мнения, и я могу добавить third one, который суммирует различия в хранении данных (которые редко является проблемой в эти дни, опять-таки только с большими проектами) и есть небольшая разница в других контекстах:

Winner: JSON without compression; With compression, minor gain by using JSON

Но если вы не в ситуации, когда у вас будет десятки тысяч запросов и раздутое приложение на стороне клиента javascript, это практически не будет иметь для вас никакой разницы. И даже если бы это было так, сжатие было гораздо более важным, чем выбор одного из них.

Я повторю то, что я сказал ранее, и JSON, и XML были созданы точно для одной цели - сериализации данных. Таким образом, они во всех отношениях взаимозаменяемы и, безусловно, являются эффективными решениями. Однако рассмотрите только то, насколько ваш проект будет масштабироваться, и даже это в значительной степени зависит от личных предпочтений.

Что касается междоменных ОТДЫХОВ и тому подобного, пожалуйста, проверьте CORS.

+0

Спасибо за подробное объяснение. По эффективности я имел в виду «это надежный». Если вы проверите мою ссылку, она покажет, как читать xml с кросс-доменного сервера. я был обеспокоен решением обхода ошибки кросс-домена и заставить ее работать для всех браузеров. – user3754676

+0

Ну, это так же надежно, как Yahoo, поскольку вы используете Yahoo в качестве прокси. – shalikas

+0

спасибо, получил anwser – user3754676

1

Вы должны сначала преобразовать JSON в объект JS с помощью JSON.parse:

var obj = JSON.parse(data); 

Их вы можете ходить в объекте нормально:

var title = obj.rss.channel.title; 
var link = obj.rss.content; 
+1

Как перебирать элементы? – user3754676

+1

Ну, я получаю Uncaught SyntaxError: Неожиданный токен o, поэтому я использую var response = JSON.stringify (results.query.results); а затем я получаю Не могу прочитать свойство «канал» неопределенной ошибки – user3754676

1

После того как вы установите JSON ответ на переменную (data в примере ниже), вы можете разобрать JSON, а затем использовать его, как и любой другой объект JavaScript. Пример:

var response = JSON.parse(data); 
var items = response.rss.channel.item; 

for (var i = 0; i < items.length; i++) { 
    console.log(items[i].title); 
    console.log(items[i].link); 
} 
+1

ну, я получаю Uncaught SyntaxError: Неожиданный токен o, поэтому я использую var response = JSON.stringify (results.query.results); и затем я получаю Не могу прочитать свойство «канал» неопределенной ошибки – user3754676

1

Если вы получили данные JSON, вам не нужно преобразовывать их в JSON, только читать.

var items = data.rss.channel.item; 

for (var i = 0; i < items.length; i++) { 
    console.log(items[i].title); 
    console.log(items[i].link); 
} 
+0

Я получаю сообщение об ошибке Uncaught TypeError: Не удается прочитать свойство 'channel' undefined – user3754676

+0

Получаете ли вы JSON или строку? –

+0

строка var obj = JSON.stringify (results.query.results); – user3754676

Смежные вопросы