为什么 JSON.parse("string") 会失败?

4
根据JSON规范,字符串是合法的JSON值。

enter image description here

那么这是为什么呢?

当JSON格式不正确时,就会发生这种情况。为了使JSON.parse正常工作,字符串应该是正确的格式。请发布您的JSON以获得更清晰的答案。 - vipulsharma
1
我做了。在图片里面。 - Kyeotic
3个回答

13
你实际上是将裸字符串string传递到函数中,这当然不是有效的JSON。如果要真正传入值"string",需要小心处理JavaScript。
试试这个:
JSON.parse("\"string\"")

额外的引号必须被转义,这样它们才能成为传递给函数的值的一部分。


我不知道,但我可以完整地解释第一个赞同。 - Potatoswatter
我没有点踩,但你可以参考实际规范来证明。JSONString是有效的,这可以从ECMA标准的“15.12.1.2 JSON语法语法”中看到。 - eis
1
@eis 语法细节需要官方标准参考,但这有点笼统。 - Potatoswatter
1
OP自己链接了规范。他的错误只是关于JavaScript的。 - Alex MDC

1
语法错误告诉你:"s"是一个意外的令牌。字符串是一个有效的JSON值,但根据规范描述,必须用双引号括起来。
string
  ""
  " chars "

通常情况下,您可以使用JSON.stringify(myValue)来检查此值的正确格式化的JSON字符串。

0
因为JSON中的字符串必须用引号括起来,在您的JSON.parse("string")调用中,JSON.parse从未将任何引号视为要解析的文本的一部分。我们看到的双引号被用于形成一个合法的字符串以传递进去 - 它们不是我们传递进去的文本的一部分。

这个调用可以正常工作:

JSON.parse('"s"')

为什么这个失败了:JSON.parse('"aa\"bb"')?如何转义双引号? - mikep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接