是的,有很多关于此的帖子.但我的疑问有点不同.我有以下数组例如
var dictionary = { "12Jan2013": [{ "id": "0", "name": "ABC" }, { "id": "1", "name": "DEF" }], "13Jan2013": [{ "id": "0", "name": "PQR" }, { "id": "1", "name": "xyz" }] };
相同的帖子在同一个网站上但是在这里字典json
数组键是动态的.这是日期,即12Jan2013.它可以是任何日期.它不是静态的.我已经搜索过但没有得到解决方案.
如何迭代这样的json数组?
和如何在上面显示的同一格式中打印json数组?
编辑
这是我的真实代码.我在下面的代码中显示了一个注释,我想要iterate
数据,即回调中的jsonData
vargetWeatherDataForCities
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 }); });
tewathia.. 10
使用for-in ...类似于:
for (var i in dictionary) { dictionary[i].forEach(function(elem, index) { console.log(elem, index); }); }
其中,i
将通过你的迭代dictionary
对象,然后你可以使用forEach
字典中的每一个JSON数组(使用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
位)以随意执行任何操作.
DEMO
编辑:使用相同的东西 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);
DEMO
使用for-in ...类似于:
for (var i in dictionary) { dictionary[i].forEach(function(elem, index) { console.log(elem, index); }); }
其中,i
将通过你的迭代dictionary
对象,然后你可以使用forEach
字典中的每一个JSON数组(使用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
位)以随意执行任何操作.
DEMO
编辑:使用相同的东西 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);
DEMO