【发布时间】:2016-05-27 18:07:41
【问题描述】:
我使用的是节点版本 6.0.0。我想将 JSON 字符串解析为 JSON 对象。该字符串包含一个对象数组。
但是JSON.parse 根本没有成功转换任何类型的数组。
它为所有数组返回一个空数组,无论它们的内容是什么。
编辑:这不仅仅是一个控制台问题。我将解析后的数据保存在我的数据库中。而且我也只看到一个空数组。控制台没有任何魔术。
更新:一些外部代码破坏了数组定义。现在所有数组定义都以一个空数组结束。正在调试原因,感谢所有回复。
示例:
contacts = '{"data": [{"p": "", "e": "", "n": "Veera Sundar"}]}' // This is my example JSON String. Rest are hit and trials.
> JSON.parse(contacts)
{ data: [] }
> a = '{"data": [{"p": ""}]}'
'{"data": [{"p": ""}]}'
> JSON.parse(a)
{ data: [] }
> a = '{"data": [1,2,3]}'
'{"data": [1,2,3]}'
> JSON.parse(a)
{ data: [] }
> a = '{"d": [1,2,3]}'
'{"d": [1,2,3]}'
> JSON.parse(a)
{ d: [] }
> a = '{"d": {"c":1}}'
'{"d": {"c":1}}'
> JSON.parse(a)
{ d: { c: 1 } } // Works for objects
> a = '{"d": {"c":[1]}}'
'{"d": {"c":[1]}}'
> JSON.parse(a)
{ d: { c: [] } }
> a = '{"d": {"c":["b","e"]}}'
'{"d": {"c":["b","e"]}}'
> JSON.parse(a)
{ d: { c: [] } }
> a = '{"d": {"c":[{"b":1}]}}'
'{"d": {"c":[{"b":1}]}}'
> JSON.parse(a)
{ d: { c: [] } }
> a = '{"d": {"c":["undefined"]}}'
'{"d": {"c":["undefined"]}}'
> JSON.parse(a)
{ d: { c: [] } }`
其他都失败了!!
请让我知道我做错了什么。所有这些示例都适用于常规控制台,例如:Chrome 控制台。
【问题讨论】:
-
您可能误解了控制台输出。你看到
{ data: [] }中的数组在控制台中是超链接的吗?点击它打开它的内容....不要误以为数组是空的。 -
我刚刚运行了您的代码,没有任何问题,trincot 是对的,也许它只是向您显示了一个误导性提示。这是我的结果:>contacts = '{"data": [{"p": "", "e": "", "n": "Veera Sundar"}]}' '{"data": [{" p": "", "e": "", "n": "Veera Sundar"}]}' > JSON.parse(contacts) { data: [ { p: '', e: '', n: ' Veera Sundar' } ] } > a = '{"data": [{"p": ""}]}' '{"data": [{"p": ""}]}' > JSON.parse( a){数据:[{p:''}]}
-
我明白了,chrome 控制台确实显示了完整的数组,但 repl 没有。我做了 util 检查,它确实显示了值,但这很奇怪: > util.inspect(JSON.parse(contacts)) '{ data: [ { p: \'\', e: \'\', n : \'Veera Sundar\' } } ' > JSON.parse(contacts) { data: [] } > a = JSON.parse(contacts) { data: [] } > util.inspect(a) '{ data: [ { p: \'\', e: \'\', n: \'Veera Sundar\' } ] }'
-
即使控制台没有显示值,不知何故,我应该能够正确访问它:a.data 返回一个空数组
-
您可以与
> JSON.stringify(JSON.parse(contacts));交叉检查解析结果。
标签: javascript json node.js