在Nodejs中parsing嵌套的JSON

我一直在试图parsing嵌套的JSON数据,下面是我的代码

var string = '{"key1": "value", "key2": "value1", "Key3": {"key31":"value 31"}}'; var obj = JSON.parse(string); console.log(obj.key1) console.log(obj[0]); 

这是输出

 $ node try.js value undefined 

为什么我得到未定义obj[0] ? 如何在这种情况下获得价值,也为嵌套的key31

立即更新在@SergeyK和其他人的帮助下,我修改了我的上面的代码,如下所示

  var string = '{"key1": "value1", "key2": "value2", "key3": {"key31":"value 31"}}'; var obj = JSON.parse(string); var array = Object.keys(obj) for (var i = 0; i < array.length; i++) { console.log(array[i], obj[array[i]]); } 

输出如下

  $ node try.js key1 value1 key2 value2 key3 { key31: 'value 31' } 

但对于{“key31”:“value 31”},如何访问Key'key31'并获取其值'31'

你不能通过索引访问命名的对象属性。 你可以使用obj[Object.keys(obj)[0]]

编辑:

正如@smarx在注释中所解释的,由于Object.keys是无序的,所以这个答案不适合通过索引直接访问特定的属性,所以只有在需要循环对象的键/值的情况下。

例:

 var string = '{"key1": "value", "key2": "value1", "Key3": {"key31":"value 31"}}'; var obj = JSON.parse(string); var keysArray = Object.keys(obj); for (var i = 0; i < keysArray.length; i++) { var key = keysArray[i]; // here is "name" of object property var value = obj[key]; // here get value "by name" as it expected with objects console.log(key, value); } // output: // key1 value // key2 value1 // Key3 { key31: 'value 31' } 

当你试图访问

  console.log(obj[0]); 

你实际上是试图在数组中的第一个内存位置引用元素,但是var string是一个散列而不是数组。 这就是为什么你undefined

我不知道你想要obj[0]做什么,所以我不能帮助。

要获得key31的值,请使用obj.Key3.key31 ,该value 31在logging时应为value 31

console.log(obj[0]); 因为obj is not an array所以给出了undefined 。 只有当obj是一个数组时, obj[0]才会工作,因为我们正在访问数组中的first index元素。

例如:

 var obj = ["val1","val2","val3"]; console.log(obj[0]); // val1 

根据要求:

 var string = '{"key1": "value", "key2": "value1", "Key3": {"key31":"value 31"}}'; var obj = JSON.parse(string); var keyArray = Object.keys(obj); // key1 console.log(obj[(keyArray[0])]); // value 

工作小提琴:

https://jsfiddle.net/kbwbspnk/

对于嵌套的属性值,你必须使用. 运营商。

 console.log(obj.Key3.key31); // value 31 

你的variables(string)是不是在上面的情况下数组其对象,你不能访问使用索引,如0,1,2 …,你可以访问它的键值名称,如key1,key2 …

例如:obj ['key1'] $ value obj ['Key3'] ['key31'] $ value 31

console.log(obj [0])只有在obj是一个数组时才会显示它的值。 例如:

 var obj = ["value","value2"]; console.log(obj[0]) --> value 

用一个对象,你需要使用这个键作为标识符。

对于嵌套的按键31:

 console.log(obj.Key3.key31) --> value 31 

希望是有帮助的