JSON.parse()是否需要双引号?

14 javascript firefox json

我正在使用Firefox 3.5b4.

这会警告[object Object],[object Object]:

var jsonString = '[{"foo": "one", "bar": 1}, {"foo": "two", "bar": 2}]';
var jsonObjects = JSON.parse(jsonString);
alert(jsonObjects);
Run Code Online (Sandbox Code Playgroud)

这会警告空字符串,即jsonObjects为null.

var jsonString = "[{'foo': '1', 'bar': 2}, {'foo': '3', 'bar': 4}]";
var jsonObjects = JSON.parse(jsonString);
alert(jsonObjects);
Run Code Online (Sandbox Code Playgroud)

同样,对于不带引号的属性名称,即{foo:'1',bar:2}.

这是怎么回事?我错过了一些明显的东西,还是有关于JSON.parse的双引号和单引号的规则?所有三个版本都可以使用eval工作.

Jav*_*ier 31

JSON标准要求双引号.

请记住,JSON不仅仅是"编写JS对象".这是一种非常严格的语法,恰好也可以作为JS对象读取.并非每个JS有效语法都是有效的JSON.实际上,你的例子并不是真正有效的JSON,因为它是一个对象数组,而标准指定顶部构造必须是一个对象.

当然,大多数JSON解析器更灵活,允许非标准选项(如单引号); 但不要依赖于此.

  • 它在哪里说顶部结构必须是一个对象?[本文档](http://www.ietf.org/rfc/rfc4627.txt?number=4627)给出了一个数组的例子,[json.org](http://json.org/)没有似乎没有具体说明这个要求. (4认同)