检查JSON的密钥

时间:2011-08-26 14:12:11

标签: javascript json

var x = {
    "completed": "",
    "globalExposures": "10",
    "tagExposures": [
        {"8": 11},{"5": 12},{"10":23}      
    ]
};

我想使用JSON访问“tagExposures”的键,即8,5和10。如果存在特定密钥,我想执行操作。我尝试下面的代码,但它没有给出所需的o / p。请,建议。

var exp = {
    "completed": "",
    "globalExposures": "10",
    "tagExposures": [
        {"8": 11},{"5": 12} ,{"10":23}      
    ]
};
var arr=exp["tagExposures"];
var kys=[];
for(k in arr){
  if(arr.hasOwnProperty(k)) kys.push(k);
}
console.log(kys); //=> This gives ['0','1']

4 个答案:

答案 0 :(得分:2)

这是因为tagExposures是一个键为0和1的数组

"tagExposures": [
        {"8": 11},// 0
        {"5": 12} // 1      
    ]

如果您尝试使用tagExposures的相同代码,请执行以下操作:

"tagExposures": {
        "8": 11,
        "5": 12      
    }

它会按你的意愿工作。

小提琴:http://jsfiddle.net/maniator/H5z6N/

输出:["5", "8"]

答案 1 :(得分:1)

for(k in arr){
  if(arr.hasOwnProperty(k)) kys.push(k);
}

对于数组是错误的。只需将一个普通循环与Object.keys结合使用,它返回每个对象的键(每次都是一个键):

for(var i = 0; i < arr.length; i++){
    kys = kys.concat(Object.keys(arr[i]));
}

答案 2 :(得分:1)

我认为你错误地定义了tagExposures关联数组。这给出了“8,5”例如:

var exp = {
    "completed": "",
    "globalExposures": "10",
    "tagExposures": {
        "8": 11,"5": 12
    }
};
var arr=exp["tagExposures"];
var kys=[];
for(k in arr){
  if(arr.hasOwnProperty(k)) kys.push(k);
}
console.log(kys);

答案 3 :(得分:0)

您的for(k in arr)循环正在为您提供来自tagExposures的密钥,这是一个数组。你需要另一个for循环来从对象中获取密钥。

for(k in arr){
    if(arr.hasOwnProperty(k)){
        var obj = arr[k];
        for(v in obj){
            if(obj.hasOwnProperty(v)){
                kys.push(v);
            }
        }
    }
}
console.log(kys); // ["8", "5", "10"]