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

时间:2015-08-12 11:28:12

标签: javascript json syntax

基本上,我试图通过向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. 该实现接受单引号,但双引号
  3. 失败

2 个答案:

答案 0 :(得分:0)

正如评论中所指出的那样,因为这是JSON规范指定的内容。 AFAIK的原因是JSON意味着是数据交换格式(语言不可知)。许多语言,甚至那些具有散列字符的语言,都不允许不带引号的字符串作为哈希表键。

答案 1 :(得分:0)

混淆的主要原因似乎是JSON和JavaScript对象之间的区别。

JSON (JavaScript Object Notation)是一种数据格式,旨在以简单的格式进行数据交换。这就是为什么只有一个有效语法的原因。它使解析更容易。您可以在JSON website找到更多信息。

关于JSON的一些注释:

  • 必须使用"
  • 引用密钥
  • 值可能是字符串,数字,对象,数组,布尔值或" null"
  • 必须使用"
  • 引用字符串值
另一方面,

JavaScript objects与JSON(显然)相关,但不完全相同。有效的JSON也是一个有效的JavaScript对象。然而,另一种方式却不是。

例如:

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