-1

我的 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 中吗?

4

2 回答 2

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 中输出嵌套对象的更多详细信息

于 2012-12-16T07:52:03.583 回答
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>')

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

于 2012-12-16T08:06:29.490 回答