Reputation: 125
JSON newb asking: Given the following json data:
{
"Users": [
{
"userName": "Herbie",
"dates & times": [
{ "2014.08.01": "120.0" },
{ "2014.08.02": "123.0" },
{ "2014.08.03": "126.0" }
]
},
{
"userName": "Wayne",
"dates & times": [
{ "2014.08.01": "120.0" },
{ "2014.08.02": "123.0" },
{ "2014.08.03": "126.0" }
]
},
{
"userName": "Freddie",
"dates & times": [
{ "2014.08.01": "120.0" },
{ "2014.08.02": "123.0" },
{ "2014.08.03": "126.0" }
]
},
{
"userName": "Ron",
"dates & times": [
{ "2014.08.01": "120.0" },
{ "2014.08.02": "123.0" },
{ "2014.08.03": "126.0" }
]
},
{
"userName": "Tony",
"dates & times": [
{ "2014.08.01": "120.0" },
{ "2014.08.02": "123.0" },
{ "2014.08.03": "126.0" }
]
}
]
}
... and wanting to retrieve a specified user's dates & times data so it can be rendered, e.g.:
Date 01: Time 01
Date 02: Time 02
Date 03: Time 03
I've read much about looping thru arrays and objects but I'm still confused as to how to get the dates & times (or any keys/values) if the keys are unique. So far I have this:
var usersArray = myObj["Users"];
for (var user in usersArray){
if (!usersArray[user].userName == selUser) {
alert("user not found");
}
else if (usersArray[user].userName == selUser) {
var datesAndTimesArray = usersArray[user]["dates & times"];
console.log(selUser +"'s dates & times: " + datesAndTimesArray); // returns array of objects
}
}
for (var someKey in datesAndTimesArray){
// here's where I'm struggling, trying to get all the dates & times for the selected user, such that I can render it as described above
// pseudo-code
}
Btw: studying javascript, not using jquery etc.
Many thanks in advance,
svs
Upvotes: 0
Views: 2281
Reputation: 782785
Since datesAndTimesArray
is an array of objects, you need a nested loop to process it.
for (var i in datesAndTimesArray) {
var obj = datesAndTimesArray[i];
for (var date in obj) {
console.log('Date ' + date + ': Time' + obj[date]);
}
}
It would probably be better for the dates and times to be single objects instead of arrays, e.g.
"dates & times": {
"2014.08.01": "120.0",
"2014.08.02": "123.0",
"2014.08.03": "126.0"
}
Then you only need to do for (date in datesAndTimesArray)
Upvotes: 1