Javascript 为什么JSON.parse对引号如此挑剔?
基本上,我试图通过向JSON.parse()提供一个字符串来创建这样的对象: 直觉上我试过:Javascript 为什么JSON.parse对引号如此挑剔?,javascript,json,syntax,Javascript,Json,Syntax,基本上,我试图通过向JSON.parse()提供一个字符串来创建这样的对象: 直觉上我试过: a = JSON.parse('{x:1}') // -> Uncaught SyntaxError: Unexpected token x 经过一番努力,我发现: a = JSON.parse('{"x":1}') // -> Object {x: 1} 但后来我不小心改变了语法,引起了额外的混乱: a = JSON.parse("{'x':1}") //-> Uncaught
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 '
所以现在我在寻找一个解释
正如注释中指出的,因为这是JSON规范所指定的。AFAIK的原因是JSON是一种数据交换格式(与语言无关)。许多语言,甚至是那些具有散列文字的语言,都不允许将不带引号的字符串作为散列表键。造成混淆的主要原因似乎是JSON和JavaScript对象之间的差异
JSON(JavaScript对象表示法)是一种数据格式,旨在允许以简单格式进行数据交换。这就是为什么只有一种有效语法的原因。它使解析变得更容易。您可以在上找到更多信息 关于JSON的一些注意事项:
- 钥匙必须用
“
- 值可以是字符串、数字、对象、数组、布尔值或“null”
- 字符串值必须用
“
另一方面,它们与JSON相关(显然),但并不完全相同。Valid JSON也是一个有效的JavaScript对象。然而,另一方面,情况并非如此 例如:
- 键和值可以用
或“
”
- 不必总是引用密钥
- 值可能是函数或JavaScript对象
JSON.parse
函数期望字符串由JSON数据而不是javascript数据组成。“parse”一词被广泛使用,但它有一个相当精确的定义eval()
(但我不建议这样做)
a = JSON.parse("{'x':1}")
//-> Uncaught SyntaxError: Unexpected token '