在 JavaScript 中获取 json-object 的键

我在 JavaScript 中有一个 json-object,我想在其中获取用过的键。我的 JavaScript 代码如下:

var jsonData = [{"person":"me","age":"30"},{"person":"you","age":"25"}];

我需要一个循环来提醒我“ person”和“ age”,它们是 json-Array 中第一个对象的键。

567310 次浏览

[你所拥有的只是一个对象,而不是一个“ json-object”。JSON是一种文本符号。您引用的是使用 数组初始化程序对象初始化程序的 JavaScript 代码(也就是“对象文本语法”)。]

如果可以依赖 ECMAScript5特性,那么可以使用 Object.keys函数获取对象中的键数组(属性名)。所有现代浏览器都有 Object.keys(包括 IE9 +)。

Object.keys(jsonData).forEach(function(key) {
var value = jsonData[key];
// ...
});

这个答案的其余部分写于2011年。在今天的世界,A)你不需要填充这个,除非你需要支持 IE8或更早的(!)B)如果你这样做了,你就不会用一次性的你自己写的或者从 SO 答案中抓取的答案(也许在2011年也不应该这样做)。您可以使用策划填料,可能从 es5-shim或通过传送器像巴别尔,可以配置为包括填料(这可能来自 es5-shim)。

以下是2011年剩下的答案:

注意,旧版本的浏览器不会有这个功能,如果没有,这是你可以自己提供的一个:

if (typeof Object.keys !== "function") {
(function() {
var hasOwn = Object.prototype.hasOwnProperty;
Object.keys = Object_keys;
function Object_keys(obj) {
var keys = [], name;
for (name in obj) {
if (hasOwn.call(obj, name)) {
keys.push(name);
}
}
return keys;
}
})();
}

它使用 for..in循环(更多信息请点击这里)遍历对象的所有属性名,并使用 Object.prototype.hasOwnProperty检查该属性是否由对象直接拥有而不是继承。

(没有自执行函数我也可以做到,但是我更喜欢我的函数而不是 有名字,并且与 IE 兼容 不能使用命名函数表达式[好吧,不是没有很大的关注]。因此,自执行函数的存在是为了避免函数声明创建全局符号。)

var jsonData = [{"person":"me","age":"30"},{"person":"you","age":"25"}];


for(var i in jsonData){
var key = i;
var val = jsonData[i];
for(var j in val){
var sub_key = j;
var sub_val = val[j];
console.log(sub_key);
}
}

剪辑

var jsonObj = {"person":"me","age":"30"};
Object.keys(jsonObj);  // returns ["person", "age"]

Object有一个 property keys,从该 Object返回一个键的 Array

Chrome,FF & Safari 支持 Object.keys

工作代码

var jsonData = [{person:"me", age :"30"},{person:"you",age:"25"}];


for(var obj in jsonData){
if(jsonData.hasOwnProperty(obj)){
for(var prop in jsonData[obj]){
if(jsonData[obj].hasOwnProperty(prop)){
alert(prop + ':' + jsonData[obj][prop]);
}
}
}
}