我试图在循环中获取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;?
谢谢!
答案 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
返回一个数组,因此您的键总是数字数组索引 - 0
,1
,2
,依此类推。您无法使用哈希键查找$.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']);