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:不客氣:-) –