user2028856
user2028856

Reputation: 3203

Get key values in JSON array

I'm trying to get the key values of each record in a JSON array when looping through it. Currently I have a simple JSON object like this:

 "users": {
    "key_11": {
      "text": "11"
    },
    "key_22": {
      "text": "22"
    },
    "key_33": {
      "text": "33"
    }
 }

My current script uses the 'map' method to convert this JSON objet to a loop-able array:

var user_profiles_array = $.map(user_profiles_string, function(el) { return el; });

for (var xt = 0; xt < user_profiles_array.length; xt++) {
    console.log(user_profiles_array[xt].text); //11 or 22 
}

My question is, how can I get the value for e.g: 'key_11' or 'key_22'?

Thanks!

Upvotes: 0

Views: 8452

Answers (2)

Dan O
Dan O

Reputation: 6090

you can use Object.keys to get an array of all of your object's keys. Once you have that array, you can use Array.forEach to iterate over it as necessary:

Object.keys(usersObject).forEach(function(key, keyIndex) {
  console.log("index:",keyIndex,"key:",key,"value:",usersObject[key]);
});

But!

your particular problem here is being caused by using $.map instead of JSON.parse. $.map returns an array, so of course your keys are always going to be numerical array indices - 0, 1, 2, and so on. You're not going to be able to use hash keys to find things in the array returned by $.map. Furthermore, judging by your variable names you're calling $.map on a string which is definitely not going to do what you want. Assuming you figure that part out and you somehow get a valid JavaScript object, and you still need to use $.map() for some reason, what you can do is this:

// $.map will return an array...
$.map(user_profiles_object, function(objVal, objKey) {
    // ...and each item in that array will be an object with a
    // property named 'key' and a property named 'val'
    return {
      key: objKey,
      val: objVal
    };
}).forEach(function(arrayObj) {
    // now each item in the array created above will be an object
    // created by your callback function:
    console.log(arrayObj.key,":",arrayObj.val);
});

Upvotes: 2

Johan Guzm&#225;n
Johan Guzm&#225;n

Reputation: 1

You can also rely on Js's foreach.

// JSON string must be valid. Enclose your JSON in '{}' (curly braces);
var user_profiles_string =  '{ "users": { "key_11": { "text": "11" }, "key_22": { "text": "22" }, "key_33": { "text": "33" }}}';
var user_profiles_array  = JSON.parse(user_profiles_string); 

// For retrieval in loop, the Js foreach asigns the key to index param (i in this case).
for (i in user_profiles_array.users) {
    // i is the key of the user currently iterated.
    console.log('Key name is: ' + i);
    // Use i as the index to retrieve array value.
    console.log(user_profiles_array.users[i]);
}

// For direct retrieval using any given known key:
console.log(user_profiles_array.users['key_11']);

Upvotes: 0

Related Questions