如何访问for循环内的json数组的字段名称?

问题描述:

我的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

像这样的东西应该工作:

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

你的外categories对象是包含许多子对象的对象。您可以使用for...in循环遍历这些子对象。

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

结帐这个

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