Я получаю один вместо многих записей после загрузки JSON с JQuery - PullRequest
0 голосов
/ 13 сентября 2010

Я построил JSON

{
    "News": {
         "Article": {"title": "test"},
         "Article": { "title": "test" },
         /*Snipped*/
         "Article": { "title": "test" },
         "Article": { "title": "test" }
    },
    "count": "20"
}

, который проверяется в JSON .Но когда я пытаюсь получить эти данные через jQuery, я не получаю ожидаемого:

$.getJSON('php/json.php', function(data) {
  console.log(data);
});

Результаты:

News: Object
Article: Object
title: "test"
__proto__: Object
__proto__: Object
count: "20"

Но где мои 19 других объектов Article?Я новичок в JSON и JQuery getJSON.Я что-то пропустил?

Ответы [ 3 ]

8 голосов
/ 13 сентября 2010

Объекты JavaScript являются словарями, что означает, что имя должно быть уникальным.Вы реплицируете Article, поэтому каждый экземпляр перезаписывает предыдущий (или игнорируется; я не знаю, по какому пути идет парсер).

Чтобы исправить, вам нужно определить это имя как ссылку на массив:

{ "News": { "Article": [
                { "title": "test" }, 
                { "title": "test" }, 
                ...], 
             "count": "20" }

Но вы, вероятно, могли бы уменьшить это еще больше, предполагая, что все новости - это статьи, потому что count становится лишним:

{ "News": [
          { "title": "test" }, 
          { "title": "test" }, 
          ...] }
1 голос
/ 13 сентября 2010

Лучшим форматом будет

{
    "News": {
         "1": {"title": "test","type":"article"},
         "2": {"title": "test","type":"article"},
         /*Snipped*/
         "19": {"title": "test","type":"article"},
         "20": {"title": "test","type":"article"}
    },
    "count": "20"
}

Так что вы можете делать с каждым.

$.each(Object.news,function(id,ObjectItem){
    if(ObjectItem.type == 'article')
    {
        //do something with ObjectItem.title
    }
})
0 голосов
/ 13 сентября 2010

Вы определили клавишу Article несколько раз. Это не синтаксическая ошибка (именно поэтому форматировщик не жалуется), а скорее логическая. Вместо этого вы должны использовать массив.

...