user1613163
user1613163

Reputation: 125

Getting all keys & their values from nested objects in JSON array (w/out jQuery)

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

Answers (1)

Barmar
Barmar

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

Related Questions