2012-03-15 87 views
5

這裏是我的jQuery響應代碼:如果事先不知道屬性名稱,如何解析JSON數據?

var response = $.parseJSON(response); 

for (var i = 0; i < response.groupIds.length; i++) { 
    console.log(response.groupIds[i], i); 
} 

每個response.groupIds[i]的形式{"unknown name":"unknown value"}的。

我希望在JavaScript中訪問這兩個數據位,當我事先不知道什麼時候,我該如何實現這一點。 unknown name是?

回答

12

使用Object.keys來檢索密鑰名稱的完整列表(數組)。一個polyfill可用here

var group = response.groupIds[i]; 

var allPropertyNames = Object.keys(group); 
for (var j=0; j<allPropertyNames.length; j++) { 
    var name = allPropertyNames[j]; 
    var value = group[name]; 
    // Do something 
} 

您的問題的回覆格式只包含一個鍵值對。該代碼可以簡化爲:如果你不感興趣的列表

var group = response.groupIds[i]; 
var name = Object.keys(group)[0]; // Get the first item of the list; = key name 
var value = group[name]; 

,使用for-i-in循環hasOwnProperty。必須使用最後一個方法來排除從原型繼承的屬性。

for (var name in group) { 
    if (group.hasOwnProperty(name)) { 
     var value = group[name]; 
     // Do something 
    } 
} 
+0

感謝羅布,但是我上面的代碼是什麼對象?響應? – 2012-03-15 21:14:22

+0

啊,我明白了,謝謝。 – 2012-03-15 21:16:06

3

使用for..in循環:

for(x in response.groupIds[i]) { 
    // x is now your unknown key 
    // response.groupIds[i][x] is the unknown value 
} 

由於只有一個對象的屬性,那將很好地工作。

+0

當我嘗試這個,說我沒有定義? – 2012-03-15 21:19:33

+0

你沒有在你的第一個'for'循環中定義它嗎? – 2012-03-15 21:21:19

相關問題