获取JSON数组中的键值

时间:2016-01-20 15:52:27

标签: javascript jquery json

我试图在循环中获取JSON数组中每条记录的键值。目前我有一个简单的JSON对象:

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

我当前的脚本使用了'地图'将此JSON对象转换为可循环数组的方法:

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 
}

我的问题是,我怎样才能获得例如:&#39; key_11&#39;或&#39; key_22&#39;?

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用Object.keys获取所有对象键的数组。拥有该数组后,您可以根据需要使用Array.forEach进行迭代:

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

但是!

此处的特定问题是使用$.map代替JSON.parse造成的。 $.map返回一个数组,因此您的键总是数字数组索引 - 012,依此类推。您无法使用哈希键查找$.map返回的数组中的内容。此外,根据您的变量名称判断您在字符串上调用$.map,这绝对不会达到您想要的效果。假设你想出那部分并且你以某种方式获得了一个有效的JavaScript对象,并且由于某种原因你仍然需要使用$.map(),你可以做的是:

// $.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);
});

答案 1 :(得分:0)

你也可以依靠Js的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']);