Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从JSON数组转换为对象后未定义的值_Javascript - Fatal编程技术网

Javascript 从JSON数组转换为对象后未定义的值

Javascript 从JSON数组转换为对象后未定义的值,javascript,Javascript,我有一个JSON数组,其中一个对象由节点和链接组成 data = [Object]=[ { nodes: Array[..] ,links: Array[…] } ] 这一切都很好,但对于访问链接,例如,我必须使用数据[0]。链接,这有点烦人。我希望数组是一个对象,这样data.links就可以访问这些链接。我已尝试设置: data = data[0]; 但是对象数组data.links显示为“undefined”。似乎在访问特定元素时会显示值,例如data.links[3]。name。为什

我有一个JSON数组,其中一个对象由节点和链接组成

data = [Object]=[ { nodes: Array[..] ,links: Array[…] } ]
这一切都很好,但对于访问链接,例如,我必须使用数据[0]。链接,这有点烦人。我希望数组是一个对象,这样data.links就可以访问这些链接。我已尝试设置:

data = data[0];
但是对象数组data.links显示为“undefined”。似乎在访问特定元素时会显示值,例如
data.links[3]。name
。为什么呢

编辑:

更具体地说:

如果数据=[{节点:数组[…],链接:数组[…]}]=>

console.log(data[0].links); //shows the data[0].links[0].name = value in the console
如果数据={节点:数组[…],链接:数组[…]}=>

console.log(data.links); //shows data[0].links[0].name = undefined
但有趣的是

console.log(data.links[0].name); //shows the correct value.
有两种解决方案:

如果控制JSON输出,只需删除基本上将对象包装在数组中的括号
[]

data = { nodes: [...] ,links: [...] };
如果不控制JSON,只需将数组的零索引分配给实际要使用的变量即可

json = [ { nodes: [...] ,links: [...] } ];
data = json[0];

不幸的是,“links”是一个数组。要访问该数组的成员,您需要访问其索引值。

此符号是什么?在JS中,
[Object]
是一个包含内置对象构造函数的数组,
数组[foo]
查找
数组
构造函数上的属性,该构造函数的名称是计算
foo
的结果,然后对象数组data.links显示为“undefined”-如何显示?请展示更多的代码,也许还有一个更真实的数据示例,它实际上是有效的JS。对于您显示的数据,在执行
data=data[0]
之后,如果您说
data.links
,它将为您提供链接数组,因此您必须使用
data.links[0]
等访问各个链接(顺便说一句,您的问题中没有JSON-JSON是字符串格式)@NNNN:我编辑这些问题是为了澄清问题。谢谢你的回答,不加括号直接设置就可以了。但是,在开发人员工具中查看对象时,对于节点和链接数组中未定义的值,我仍然存在相同的问题。例如:data.nodes[1].name=“undefined”。@graphmeter-这是因为
节点
是一个数组,没有
名称
属性-数组中的项有一个
名称
属性(可能是;您在问题中没有显示它)。您必须说出
data.nodes[0]。第一个节点的名称为
;在循环中使用一个变量依次访问每个变量。