Проблема доступа к данным JSON в этом примере - PullRequest
0 голосов
/ 30 января 2011

это json, который у меня есть, он действителен, но по какой-то причине, если я получу доступ к этому query.pages.length, это "undefined" ... как тогда узнать число детей в pages? они дети?

  {
       "query-continue":{
          "allpages":{
             "gapfrom":"Tron (film)"
          }
       },
       "query":{
          "pages":{
             "174059":{
                "pageid":174059,
                "ns":0,
                "title":"Tron"
             },
             "29799461":{
                "pageid":29799461,
                "ns":0,
                "title":"Tron: Betrayal"
             },
             "2424602":{
                "pageid":2424602,
                "ns":0,
                "title":"Tron: Deadly Discs"
             },
             "25415189":{
                "pageid":25415189,
                "ns":0,
                "title":"Tron: Evolution"
             },
             "29958517":{
                "pageid":29958517,
                "ns":0,
                "title":"Tron: Evolution - Battle Grids"
             },
             "22547607":{
                "pageid":22547607,
                "ns":0,
                "title":"Tron: Legacy"
             },
             "29541046":{
                "pageid":29541046,
                "ns":0,
                "title":"Tron: Legacy (soundtrack)"
             },
             "11825742":{
                "pageid":11825742,
                "ns":0,
                "title":"Tron: Solar Sailer"
             },
             "8005401":{
                "pageid":8005401,
                "ns":0,
                "title":"Tron: The Ghost in the Machine"
             },
             "29487895":{
                "pageid":29487895,
                "ns":0,
                "title":"Tron: Uprising"
             }
          }
       }
    }

Ответы [ 3 ]

0 голосов
/ 30 января 2011

query.pages - это объект, а не массив. Если вы управляете генерацией json, вы можете вместо этого сделать его массивом объектов:

"query":{
  "pages":[
    {
      "pageid":174059,
      "ns":0,
      "title":"Tron"
    },
    {
      "pageid":29799461,
      "ns":0,
      "title":"Tron: Betrayal"
    },
    {
      "pageid":2424602,
      "ns":0,
      "title":"Tron: Deadly Discs"
    }
  ]
}

тогда вы можете использовать query.pages.length. использование массива - это нормально, поскольку ключом является просто pageid.

0 голосов
/ 30 января 2011

Мне пришлось с этим разобраться ... вам нужно будет перебирать каждую страницу на страницах и проверять hasOwnProperty, или если все они пронумерованы ...


var count = 0;
for (var key in query.pages) {
  //local page variable
  var page = query.pages[key];

  //page isn't what you're looking for
  if (!page || page.pageid != key) continue;

  //increase count
  count++;

  //do something with page
}

Я уже видел такой неаккуратный Джсон, и инженер должен быть застрелен.

0 голосов
/ 30 января 2011

Я написал этот код для подсчета длины pages:

count = 0;
for (var key in netData.query.pages) {
count = count + 1;
}
alert(count);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...