Чтение данных JSON с помощью getjson - PullRequest
0 голосов
/ 19 июня 2011

У меня есть файл json:

{
  "bible" : {
    "@attributes" : {
      "translation" : "ASV"
    },
    "testament" : [
      {
        "@attributes" : {
          "name" : "Old"
        },
        "book" : [
          {
            "@attributes" : {
              "name" : "Genesis"
            }
          },
          {
            "@attributes" : {
              "name" : "Exodus"
            }
          },
          {
            "@attributes" : {
              "name" : "Leviticus"
            }
          },
          {
            "@attributes" : {
              "name" : "Numbers"
            }
          },
          {
            "@attributes" : {
              "name" : "Deuteronomy"
            }
          },
          {
            "@attributes" : {
              "name" : "Joshua"
            }
          },
          {
            "@attributes" : {
              "name" : "Judges"
            }
          },
          {
            "@attributes" : {
              "name" : "Ruth"
            }
          }
        ]
      }
    ]
  }
}

Я использую код для чтения:

$(document).ready(function(){
   $.getJSON("asv/index.json", function(json) {
       alert("JSON Data: " + json.bible.testament[1].name);
     });
});

Но это дает мне неопределенное. Пожалуйста, дайте мне знать, как читать названия книг. Также @attributes для чего? Спасибо

Ответы [ 4 ]

2 голосов
/ 19 июня 2011

попробуйте это:

 $.getJSON('asv/index.json', 
function(json) {
    $.each(json.bible.testament[0].book,  // $.each() looping on each books
    function(i, value) {
        console.log(value['@attributes'].name);  // here you get the name of books
    });
0 голосов
/ 19 июня 2011

json.bible.testament[1].name не определено.

попробуй json.bible.testament[1]['@attributes'].name

0 голосов
/ 19 июня 2011

Если у вас есть браузер, который поддерживает console.log (например, Firefox), вы можете сделать 'console.log (json)' и посмотреть на структуру.
Вы можете получить доступ к таким именам:

json.bible.testament [0] .book [0] [ '@ атрибуты']. Имя
json.bible.testament [0] .book [1] [ '@ атрибуты']. имя
...

0 голосов
/ 19 июня 2011

У вас неправильный путь объекта к вашим данным.Я рекомендую вам вставить свои данные json в программу просмотра, чтобы было проще увидеть, что вам нужно получить.Попробуйте, например, http://jsonviewer.stack.hu/.

<script type="text/javascript">
$(document).ready(function(){
    $.getJSON("asv/index.json", function(json) {
        alert(json.bible.testament[0]['@attributes'].name);
        alert(json.bible.testament[0].book[0]['@attributes'].name);
    });
});
</script>

Это работает для меня.Обратите внимание, что у вас нет индекса testament[1], только testament[0].

Кажется, что часть @attributes - это то, что сценарий, который генерирует JSON, создает, и вам ничего не нужно использовать, скажем JSON.Я бы удалил его, если бы у меня был доступ к сценарию создания JSON, но, возможно, он используется в какой-то системе, которую вы не видите.

...