我一直在尝试解析嵌套的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;
答案 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 array
。 obj[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)
console.log(obj [0])才会显示其值。例如:
var obj = ["value","value2"];
console.log(obj[0]) --> value
使用对象,您需要使用密钥作为标识符。
对于嵌套密钥31:
console.log(obj.Key3.key31) --> value 31
希望有所帮助