2012-08-13 43 views
0

我的JSON數組是這樣的:如何訪問for循環內的json數組的字段名稱?

var data = 
{ 
    "categories": 
    { 
     "category1": 
     { 
      "Name": "Maps", 
      "Id": 3, 
      "orderInList": 1 
     }, 
     "category2": 
     { 
      "Name": "Books", 
      "Id": 2, 
      "orderInList": 2 
     } 
    } 
}; 

當我寫這樣做的console.log(數據),該「鑰匙」對象的格式如下:

|   key   | value | 

categories[category1][Id]  "3" 

我如何可以遍歷這在一個for循環(不使用JQuery的$ .each),所以我可以告訴哪個鍵,值對是名稱,Id或orderInList的?

Working Jsfiddle

+5

這是一個JavaScript對象文字,它不是JSON和沒有價值的是陣列。 – Quentin 2012-08-13 13:13:22

+0

http://jsfiddle.net/rlemon/tzUWP/1/你只是想做到這一點? – rlemon 2012-08-13 13:16:18

+0

可能重複[我有一個嵌套的數據結構/ JSON,如何訪問特定的值?](http://stackoverflow.com/questions/11922383/i-have-a-nested-data-structure-json-how -can-access-a-specific-value) – Esailija 2012-08-13 13:18:22

回答

1

像這樣的東西應該工作:

for (var category in data['categories']) { 
    for (var key in data['categories'][category]) { 
     var value = data['categories'][category][key]; 

     // Now do whatever you want based on key... 
     switch (key) { 
      case 'Name': 
       // Whatever 
       break; 
      default: 
       break; 
     } 
    } 
} 

在任何情況下,在內部循環將持有密鑰和嵌套對象的價值和類別將持有的類別鍵和值。

可能令人困惑的是,對象屬性可以像Javascript中的數組值一樣訪問。

因此考慮下面的代碼:

var some_object = { 
    a: 0 
}; 

// These two lines do the same thing, even though some_object is not an array. 
some_object.a = 1; 
some_object['a'] = 1; 
+0

謝謝你。它看起來很複雜!雖然hrrm,我似乎無法得到這個工作在jsfiddle。當我編寫console.log(值)時,沒有任何東西會被記錄到控制檯。 http://jsfiddle.net/tzUWP/3/ – Kiada 2012-08-13 13:35:07

+0

@CraigWhitley我對它進行了測試,它在jsfiddle中不工作的原因是因爲某些與$ .ajax位相關的東西。我不知道任何關於jsfiddle,但我試圖將show_response(數據)附加到按鈕,它適用於我。 – Telgin 2012-08-13 13:41:26

+0

你說得對,當我將ajax請求帶走時,完美地工作。謝謝! – Kiada 2012-08-13 13:50:18

1

你的外categories對象是包含許多子對象的對象。您可以使用for...in循環遍歷這些子對象。

for (var category in data.categories) { 
    // here you can access `category.Name`, `.Id`, and `.orderInList` 
} 
0

結帳這個

var data = { 
    "categories": { 
    "category1": { 
     "Name": "Maps", 
     "Id": 3, 
     "orderInList": 1 
    }, 
    "category2": { 
     "Name": "Books", 
     "Id": 2, 
     "orderInList": 2 
    } 
    } 
}; 

function represent(obj) { 
    var reprs = []; 
    for (var key in obj) { 

    if(!obj.hasOwnProperty(key)) continue; 
    if (obj[key] instanceof Object) { 
     var result = represent(obj[key]); 
     for (var i = 0; i < result.length; i++) { 
      reprs.push("[" + key + "]" + result[i]); 
     } 
    } 
    else { 
     reprs.push("[" + key + "] = " + obj[key]); 
    } 
    } 
    return reprs; 
} 

console.log(represent(data)); 
//output 

["[categories][category1][Name] = Maps", 
"[categories][category1][Id] = 3", 
"[categories][category1][orderInList] = 1", 
"[categories][category2][Name] = Books", 
"[categories][category2][Id] = 2", 
"[categories][category2][orderInList] = 2"] 

哪個鍵,值對的名稱,ID或orderInList的?

我認爲你可以在遞歸代碼添加終止條件,以檢查是否關鍵是等於NamesIdorderInList