繁体   English   中英

为什么JSON.parse的引号这么挑剔?

[英]Why is JSON.parse so picky with quotes?

基本上,我试图通过向JSON.parse()提供一个字符串来创建这样的对象:

a = {x:1} 
// -> Object {x: 1}

凭直觉我尝试了:

a = JSON.parse('{x:1}')
// -> Uncaught SyntaxError: Unexpected token x

经过一番摆弄之后,我发现:

a = JSON.parse('{"x":1}')
// -> Object {x: 1}

但是后来我不小心更改了语法和奖金混淆:

a = JSON.parse("{'x':1}")
//-> Uncaught SyntaxError: Unexpected token '

所以现在我正在寻找一个解释为什么

  1. 必须引用属性名称
  2. 该实现接受单引号,但对双引号失败

造成混淆的主要原因似乎是JSON和JavaScript对象之间的差异。


JSON (JavaScript对象表示法)是一种数据格式,旨在允许以简单格式进行数据交换。 这就是为什么只有一种有效语法的原因。 它使解析变得容易得多。 您可以在JSON网站上找到更多信息。

有关JSON的一些注意事项:

  • 键必须用"
  • 值可以是字符串,数字,对象,数组,布尔值或“ null”
  • 字符串值必须用"

另一方面, JavaScript对象与JSON相关(显然),但不完全相同。 有效JSON也是有效的JavaScript对象。 但是,另一种方法不是。

例如:

  • 键和值可以用"'引号
  • 键并不总是必须用引号引起来
  • 值可能是函数或JavaScript对象

正如评论中指出的那样,因为这就是JSON规范指定的内容。 AFAIK的原因是JSON旨在成为一种数据交换格式(与语言无关)。 许多语言,即使是具有散列文字的语言,也不允许使用未加引号的字符串作为散列表键。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM