无法在getJSON结果中访问JSON

时间:2012-12-16 07:41:51

标签: javascript jquery ajax json

我的JSON如下:

  {
  "statistics": [
    {
      "total_questions": 4152031,

      "views_per_day": 2198092.55,
      "api_version": {
        "version": "1.0",
        "revision": "2012.10.30.200"
      },
      "site": {
        "name": "Stack Overflow",
        "logo_url": "http://cdn.sstatic.net/stackoverflow/img/logo.png",
        "api_endpoint": "http://api.stackoverflow.com",
        "site_url": "http://stackoverflow.com",
        "description": "Q&A for professional and enthusiast programmers",
        "icon_url": "http://cdn.sstatic.net/stackoverflow/img/apple-touch-icon.png",
        "aliases": [
          "http://www.stackoverflow.com"
        ],
        "state": "normal",
        "styling": {
          "link_color": "#0077CC",
          "tag_foreground_color": "#3E6D8E",
          "tag_background_color": "#E0EAF1"
        }
      }
    }
  ]
}

Javascript是:

$.getJSON('json1', function(data) {
    var items = [];

    $.each(data, function(key, val) {
        items.push('<li id="'+ statistics.data.key +'"> ' + statistics.data.val +'</li>')
    });

    $('<ul />', {
        'class':'ulLI',
        'html':items.join('')
    }).appendTo('body');
});

问题是我没有正确地访问统计数组中的数据,然后访问网站对象?您能否告诉我如何访问这些对象/数组中的数据并将其附加到html?

2 个答案:

答案 0 :(得分:3)

$.getJSON('json1', function(data)

data是整个对象

您需要遍历data.statistics这是一个数组

$.each(data.statistics, function( index, item){
     /* here you access properties like "total_questions"*/
     var totalQ= item.total_questions;
})

编辑:在JSON中显示data.statistics数组只有一个元素。如果这始终为真,您可以跳过each循环并使用javascript表示法获取数组的第一个元素:

 var nestedData= data.statistics[0];
 var totalQ= nestedData.total_questions;

如果您希望在不知道其键的情况下遍历所有属性,则需要更多代码来检查属性是对象,数组还是字符串,如果它是对象或数组,则递归循环执行相应的检查和处理。

您还需要提供有关如何在html

中输出嵌套对象的更多详细信息

答案 1 :(得分:0)

如果要打印网站对象内的所有内容,这将有效

$.getJSON('your json file path', function(data) {
var items = [];
$.each(data.statistics[0].site, function(key, val) {
items.push('<li id="'+ key +'"> ' + JSON.stringify(val) +'</li>')

您作为文件路径提供的内容似乎不正确。