2011-08-26 101 views
1
var x = { 
    "completed": "", 
    "globalExposures": "10", 
    "tagExposures": [ 
     {"8": 11},{"5": 12},{"10":23}  
    ] 
}; 

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

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'] 

回答

1

我想你已经misdefined的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); 
+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"]

+0

感谢Neal快速回复!你有什么想法做到这一点? –

+0

@ Umesh ...看着小提琴,它就在那里...... – Neal

+0

尼尔,它的辉煌! –

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])); 
} 
+0

我认为,这是一个很好的建议。 –

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"] 
+0

谢谢亲爱的。有用! –

+0

@ Umesh:不客气:-) –