JSON выбирает элемент с именем «item» - PullRequest
1 голос
/ 13 января 2010

Я пытаюсь обработать json-версию RSS-канала, но мне нужно получить доступ к массиву с меткой «data.channel.item». Я подозреваю, что, поскольку это имя конфликтует с зарезервированным словом в javascript, скрипт не работает только с этим конкретным файлом json. Это работает в других случаях.

Есть ли способ использовать «предмет», но как-то избежать его? (Да, я новичок в JavaScript)

Вот скрипт (jquery)

 <script>
  $(document).ready(function(){
    $.getJSON("http://example.com/jsonBuzz.php?callback=?",
        function(data){
          $.each(data.channel.item, function(i,item){
            $("#results").append('<li><h1>'+item.title+'</h1></li>');
          });
        });
  });

  </script>

Сокращенная версия JSON:

{"@attributes":{"version":"2.0"},"channel":{"lastBuildDate":"Mon, 11 Jan 2010... ..."generator":"Blogger","item":[{"guid":"tag:blogger.com,...

Ответы [ 2 ]

7 голосов
/ 13 января 2010

Помещение ключей в двойные кавычки позволит вам использовать зарезервированное слово - фактически, это должен быть действительный JSON (см. http://json.org/). Но на самом деле это не проблема, так как «элемент»)не является зарезервированным словом в JavaScript (см. https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Reserved_Words в качестве одной из возможных ссылок).

Вы получили item:title, а не item.title или item["title"], оба из которых являютсяправильные способы доступа к свойствам объекта.

0 голосов
/ 14 января 2010

Для справки: проблема, как оказалось, была не в коде JavaScript. Вдохновленный вопросом (Энди Э) в комментариях, я узнал, как отлавливать ошибки JavaScript и определил, что json не был правильно заключен в круглые скобки или заканчивался символом ";".

Это была проблема с PHP. PHP имеет полезную функцию json_encode , которая преобразует объект PHP в json.

Однако, будучи новичком в json, я предположил, что он готов к употреблению. Мало ли я знал, что нужно было обернуть в несколько дополнительных символов. Я пересмотрел код, и теперь он работает как запланировано.

Ниже приведен код PHP, который другие могут найти полезным. Это php-файл, который я получаю через jquery $ .getJSON, как и в моем первом посте:

<?php
header('Content-Type: text/javascript; charset=utf8');
header('Access-Control-Allow-Origin: http://www.example.com/');
header('Access-Control-Max-Age: 3628800');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');

$file='rss.xml';
$arr = simplexml_load_file($file);//this creates an object from the xml file
$json= '('.json_encode($arr).');'; //must wrap in parens and end with semicolon
print_r($_GET['callback'].$json); //callback is prepended for json-p
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...