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