Javascript 解析Nodejs中的嵌套JSON

Javascript 解析Nodejs中的嵌套JSON,javascript,json,node.js,nested,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]);

我一直在尝试解析嵌套的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]
定义?在这种情况下,如何获取值,以及嵌套键31的值

更新 现在在@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
并获取其值
value 31

您无法通过索引访问命名对象属性。您可以使用
obj[Object.keys(obj)[0]]

编辑:

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' }
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
正如@smarx在注释中所解释的,由于
对象,此答案不适合通过索引直接访问特定属性。键
是无序的,因此仅适用于需要循环对象键/值的情况

示例:

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' }
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
var string='{“key1”:“value”,“key2”:“value1”,“Key3”:{“key31”:“value 31”}';
var obj=JSON.parse(字符串);
var keysArray=Object.keys(obj);
对于(var i=0;i
我不知道你想让obj[0]
做什么,所以我帮不了你

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

在上述情况下,您的变量(字符串)未数组其对象,并且您无法使用0,1,2,您可以使用它的键值名称(如key1、key2)访问它

例如: obj['key1'] 美元价值 obj['Key3']['key31']
$value 31当您尝试访问时

 console.log(obj[0]);
实际上,您正试图引用数组中第一个内存位置的元素,但
var string
是一个哈希而不是数组。 这就是为什么您会得到
未定义的

控制台。只有当obj是数组时,日志(obj[0])才会显示其值。例如:

var obj = ["value","value2"];
console.log(obj[0]) --> value
对于对象,需要使用键作为标识符

对于嵌套键key31:

console.log(obj.Key3.key31) --> value 31
希望对您有所帮助

console.log(obj[0])
给出了
未定义的
,因为
obj不是数组
obj[0]
仅当obj是一个数组时才起作用,因为我们正在从数组访问
第一个索引
元素

示例:

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' }
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
根据要求:

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' }
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
工作小提琴:

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' }
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

对于嵌套属性值,必须使用
运算符

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

您希望obj[0]
的值是多少?它是散列,而不是数组。当您编写
obj[0]
时,您期望得到什么?JSON对象(
{…}
)使用基于键的索引,这意味着如果您想要获得
值“
,您需要通过它的键引用它:
obj[“key1”]
obj.key1
,您在使用数组时只能使用数字索引:
[…]
我认为
Object.keys
不能保证任何特定的顺序,因此无法预测您将在这里访问哪个键,对吗?(所以我看不出这段代码有什么用处。)如果我没有任何误解的话,问题中没有关于订购的内容。它适用于通过对象属性进行循环,用于“获取值”,而不是直接访问特定属性。您共享的代码段将从对象中提供随机值。(从无法预测的意义上说是随机的。)你真的认为这会帮助问这个问题的人吗?我分享的片段只是展示了如何按照要求访问值。您也可以使用
Object.keys(obj)[0]
键名,这取决于您想做什么,对吗?如何循环JSON对象的键值,因为我将获得JSON对象,并且对键名没有任何线索您的意思是“
obj
是对象而不是数组。”
string
string
:-)抱歉,我认为JSON为ARARYI是我的错误,你认为“<代码> Obj/<代码>不是一个数组。它是一个对象。”(<代码> String < /Cord>是<代码>字符串< /代码>)谢谢Rohit。事实上,我会得到一个JSON对象,我不会知道键名。@JoelDivekar好的,根据您的要求,您可以尝试这个解决方案。这是我的错误,因为我认为JSON对象是一个数组