Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
167
rated 0 times [  173] [ 6]  / answers: 1 / hits: 25591  / 11 Years ago, wed, december 25, 2013, 12:00:00

Yes there are many post regarding this.But my doubt is little different.I have following array for example



var dictionary = {
12Jan2013: [{
id: 0,
name: ABC
}, {
id: 1,
name: DEF
}],
13Jan2013: [{
id: 0,
name: PQR
}, {
id: 1,
name: xyz
}]
};


Same post is there on same site BUT here in dictionary json array key is dynamic.Here it is date ie 12Jan2013.It can be any date.It is not static.I have searched for that but didn't get solution.



How to iterate over such a json array?



AND How to print json array as in same formate shown above?



EDIT



Here is my real code.And i shown a comment in following code where i wanted to iterate data ie jsonData var in getWeatherDataForCities callback



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
});


});

More From » json

 Answers
10

Use for-in...something like:



for (var i in dictionary) {
dictionary[i].forEach(function(elem, index) {
console.log(elem, index);
});
}


where the i would iterate through your dictionary object, and then you can use forEach for every json array in the dictionary(using dictionary[i])



With this code you'll get



Object {id: 0, name: ABC} 0 
Object {id: 1, name: DEF} 1
Object {id: 0, name: PQR} 0
Object {id: 1, name: xyz} 1


You can tailor the forEach function definition(replacing the console.log bit) to do whatever you want with it.



DEMO



Edit: Doing the same thing using Object.keys



Object.keys(dictionary).forEach(function(key) {
dictionary[key].forEach(function(elem, index) {
console.log(elem, index);
});
});


Edit2: Given the somewhat complicated structure of your jsonData object, you could try using a (sort of) all-purpose function that would act on each type of component separately. I've probably missed a few cases, but maybe something like:



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


[#73553] Monday, December 23, 2013, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
lelasamiraa

Total Points: 208
Total Questions: 99
Total Answers: 107

Location: Uzbekistan
Member since Tue, Nov 30, 2021
3 Years ago
lelasamiraa questions
Thu, Jul 16, 20, 00:00, 4 Years ago
Thu, Oct 17, 19, 00:00, 5 Years ago
Mon, Aug 5, 19, 00:00, 5 Years ago
Thu, Feb 7, 19, 00:00, 5 Years ago
;