是的,有很多关于此的帖子。但我的疑问有点不同。我有以下数组例如
var dictionary = {
"12Jan2013": [{
"id": "0",
"name": "ABC"
}, {
"id": "1",
"name": "DEF"
}],
"13Jan2013": [{
"id": "0",
"name": "PQR"
}, {
"id": "1",
"name": "xyz"
}]
};
相同的帖子在同一个网站但这里的字典json
数组键是动态的。这是日期,即12Jan2013。它可以是任何日期。它不是静态的。我已经搜索过但没有得到解决方案。
如何迭代这样的json数组?
AND如何以与上面显示的相同格式打印json数组?
修改
这是我的真实代码。我在以下代码中显示了评论,其中我想要iterate
数据,jsonData
var getWeatherDataForCities
回调
var arrAllrecords = [];
var arrCityrecordForADay = [];
function getWeatherDataForCities(cityArray, callback){
var toDaysTimestamp = Math.round((new Date()).getTime() / 1000) - (24*60*60);
for(var i in cityArray){
for(var j=1; j<=1; j++){
var jsonurl = "http://api.openweathermap.org/data/2.5/history/city?q="+cityArray[i]+"&dt="+toDaysTimestamp;
$.ajax({
url: jsonurl,
dataType: "jsonp",
mimeType: "textPlain",
crossDomain: true,
contentType: "application/json; charset=utf-8",
success: function(data){
var arrCityRecordForDay = [];
/*arrCityrecordForADay.push(data.list[0].city.name);
arrCityrecordForADay.push(data.list[0].weather[0].description);
arrCityrecordForADay.push(timeConverter(data.list[0].dt));
arrCityrecordForADay.push(data.list[0].main.temp);
arrCityrecordForADay.push(data.list[0].main.humidity);
arrCityrecordForADay.push(data.list[0].main.pressure)
arrCityrecordForADay.push(data.list[0].wind.speed);*/
//'{"pets":[{"name":"jack"},{"name":"john"},{"name":"joe"}]}';
arrCityRecordForDay.push(
{"cityName" : data.list[0].city.name},
{"weather" : data.list[0].weather[0].description}
);
var tempId = data.list[0].city.name+"-"+timeConverter(data.list[0].dt);
arrCityrecordForADay.push(
{tempId : arrCityRecordForDay}
);
if(((arrCityrecordForADay.length)) === cityArray.length) {
callback(arrCityrecordForADay);
}
} });
toDaysTimestamp = toDaysTimestamp - (24*60*60);
}
}
}
$(document ).ready(function() {
var cityArray = new Array();
cityArray[0] = "pune";
getWeatherDataForCities(cityArray, function(jsonData) {
// Here I want to iterate jsonData
});
});
答案 0 :(得分:10)
使用for-in ......类似:
for (var i in dictionary) {
dictionary[i].forEach(function(elem, index) {
console.log(elem, index);
});
}
i
将遍历您的dictionary
对象,然后您可以对字典中的每个json数组使用forEach
(使用dictionary[i]
)
使用此代码,您将获得
Object {id: "0", name: "ABC"} 0
Object {id: "1", name: "DEF"} 1
Object {id: "0", name: "PQR"} 0
Object {id: "1", name: "xyz"} 1
您可以定制forEach函数定义(替换console.log
位)以执行任何操作。
编辑:使用Object.keys
Object.keys(dictionary).forEach(function(key) {
dictionary[key].forEach(function(elem, index) {
console.log(elem, index);
});
});
Edit2:鉴于jsonData
对象的结构有点复杂,您可以尝试使用一种(某种)通用函数,它将分别作用于每种类型的组件。我可能错过了一些案例,但可能是这样的:
function strung(arg) {
var ret = '';
if (arg instanceof Array) {
arg.forEach(function(elem, index) {
ret += strung(elem) + ',';
});
} else if (arg instanceof Object) {
Object.keys(arg).forEach(function(key) {
ret += key + ': /' + strung(arg[key]) + '/';
});
} else if (typeof arg === "string" || typeof arg === "number") {
ret = arg;
}
return ret;
}
document.body.innerHTML = strung(jsonData);
答案 1 :(得分:1)
请注意,您的只是一个JavaScript数组对象。为了使其易于理解,您可以像这样迭代它:
for (var i in dictionary) {
// do something with i
// here i will contain the dates
for (n = 0; n < dictionary[i].length; n++) {
// do something with the inner array of your objects
// dictionary[i][n].id contains the "id" of nth object in the object i
// dictionary[i][n].name contains the "name" of nth object in the object i
}
}
请看这个小提琴: http://jsfiddle.net/Ke8F5/
迭代看起来像这样:
12Jan2013 : (id = 0, name = ABC) (id = 1, name = DEF)
13Jan2013 : (id = 0, name = PQR) (id = 1, name = XYZ)
答案 2 :(得分:0)
您可以使用for循环。
for (var i in json) {
...
}
然后,i
是当前键,因此,您可以访问json [i]并将数据获取到相应的索引。
然后,如果你需要迭代内部元素,你可以做同样的事情。
答案 3 :(得分:0)
您可以使用for ... in
,但是您应该将其与hasOwnProperty
结合使用,否则您会发现自己正在迭代可能会破坏您的代码的继承属性。
for (var key in object) {
if (object.hasOwnProperty(key)) {
// Do stuff.
}
}