在Nodejs中解析嵌套的JSON

时间:2016-08-23 06:49:00

标签: javascript json node.js nested

我一直在尝试解析嵌套的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' }

但对于{&#34; key31&#34;:&#34;值31&#34;},如何访问Key&#39; key31&#39;并获得其价值&#39;价值31&#39;

6 个答案:

答案 0 :(得分:2)

您无法通过索引访问命名对象属性。您可以使用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' }

答案 1 :(得分:2)

当您尝试访问

 console.log(obj[0]);

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

答案 2 :(得分:1)

我不知道你想要obj[0]做什么,所以我无能为力。

要获取key31的值,请使用obj.Key3.key31,在记录时,应该生成value 31

答案 3 :(得分:1)

console.log(obj[0]);正在提供undefined因为obj is not an arrayobj[0]仅当obj是数组时才会起作用,因为我们正在从数组中访问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

答案 4 :(得分:0)

你的变量(String)在上面的情况下不是数组的对象,你不能使用索引来访问,如0,1,2 ...,你可以使用它的键值名称来访问它,如key1,key2 ...... / p>

例如:     OBJ [&#39; KEY1&#39;]     $ value     OBJ [&#39;密钥3&#39;] [&#39; key31&#39;]     $ value 31

答案 5 :(得分:0)

仅当obj是一个数组时,

console.log(obj [0])才会显示其值。例如:

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

使用对象,您需要使用密钥作为标识符。

对于嵌套密钥31:

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

希望有所帮助