2016-02-05 116 views
0

有时,JSON中有几个值不作为名称值对出现,但仅作为名称,然后是它们的属性,例如在JSON下面的objectOne,ObjectTwo和objectThree 。问题是,如果我事先不知道这些名字是什么,那么名称会不断变化,我如何提取它们?但数据结构相同如何使用javascript获取嵌套Json对象的名称

{ 
     "Number of objects": 3, 
     "Devices": { 
      "objectOne": { 
       "name": "10", 
       "name1": "50" 
      }, 
      "objectTwo": { 
       "name": "20", 
       "name1": "30" 
      }, 
      "objectThree": { 
       "name": "40", 
       "name1": "80" 
      } 
     } 
    } 
+0

http://stackoverflow.com/questions/15523514/find-by-key-deep -in-nested-json-object –

+1

你可以迭代像'for(var prop in obj.Devices)'这样的对象的属性来动态获取属性名称。 – A1rPun

+0

你打算如何使用这些动态设备名称?你需要逐个打印他们的属性还是需要访问特定的属性? – AKS

回答

3

您可以尝试使用Object.keys方法。

样品:

var yourJson = { 
    "Number of objects": 3, 
    "Devices": { 
     "objectOne": { 
      "name": "10", 
      "name1": "50" 
     }, 
     "objectTwo": { 
      "name": "20", 
      "name1": "30" 
     }, 
     "objectThree": { 
      "name": "40", 
      "name1": "80" 
     } 
    } 
} 
var keys = Object.keys(yourJson.Devices); // Array with "objectOne", "objectTwo" and "objectThree" 

UPDATE: 然后你就可以访问到objectTwo这样:

var objectTwo = yourJson.Devices[keys[1]]; 

如果需要通过所有的迭代,这是更好的:

for (var key in keys) { 
    // key = "objectOne", then "objectTwo", then "objectThree" 
    var objectN = yourJson.Devices[key]; // the device object 
} 
+0

谢谢你这是答案我正在寻找更多的问题后,如果我想提取name1的价值,我该怎么做,我试图做var name1 =键。 name1,但它给我未定义? – Imo

+0

键是一个包含对象名称的数组。你可以使用yourJson [keys [0]]来访问它们的属性。name1 –

+0

我刚更新了我的答案。 – Vinks