0

我正在尝试使用 getJSON 解析 JSON 响应,并且通过对象解析的成功有限。

这是我正在使用的 jquery,它返回 JSON 中第一个日期的适当值。我需要它来返回所有日期。下面的代码不会这样做有什么特别的原因吗?

$.getJSON('result.json', 

                   function(data) {

            var dest = [];

            for (var i = 0; i < data.length; ++i) {

                dates = data[i].dates[i];      
                visitors = data[i].dates[i].items[i];

                dest.push([dates.date,visitors.value]); 

            }
            alert(dest);

        });

这是JSON:

[
  {
"type": "visitors-unique",
"dates": [
  {
    "date": "2013-02-10",
    "items": [
      { "value":"117" }
    ]
  },
  {
    "date": "2013-02-09",
    "items": [
      { "value":"427" }
    ]
  },
  {
    "date": "2013-02-08",
    "items": [
      { "value":"403" }
    ]
  },
  {
    "date": "2013-02-07",
    "items": [
      { "value":"227" }
    ]
  },
  {
    "date": "2013-02-06",
    "items": [
      { "value":"289" }
    ]
  },
  {
    "date": "2013-02-05",
    "items": [
      { "value":"246" }
    ]
  },
  {
    "date": "2013-02-04",
    "items": [
      { "value":"236" }
    ]
  }
]
  }
]
4

2 回答 2

1

问题是当你有嵌套数组时你只有一个循环。您的代码将尝试获取第一个队列中的第一个日期,然后是第二个队列中的第二个日期,依此类推。要获取每个队列中的每个日期,您需要嵌套循环:

$.getJSON('result.json', 
  function(data) {
    var dest = [];
    for (var i = 0; i < data.length; ++i) {
      for (var j = 0; j < data[i].dates.length; j++) {
        dates = data[i].dates[j];      
        visitors = data[i].dates[j].items[0];
        dest.push([dates.date,visitors.value]); 
      }
    }
    alert(dest);
  }
);
于 2013-02-10T22:00:04.260 回答
0

这条线是问题

visitors = data[i].dates[i].items[i];

items因此,在您尝试读取的第二次迭代中只有一个值.items[1]会失败。

将行更改为

visitors = data[i].dates[i].items[0];
于 2013-02-10T21:52:43.853 回答