无法使用多个对象jquery解析json

时间:2013-02-10 21:47:30

标签: jquery json

我正在尝试使用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" }
    ]
  }
]
  }
]

2 个答案:

答案 0 :(得分: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);
  }
);

答案 1 :(得分:0)

这一行是问题

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

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

将行更改为

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