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

时间:2009-05-19 14:48:35

标签: javascript json firefox

我正在使用Firefox 3.5b4。

此警告[对象对象],[对象对象]:

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

这会警告一个空字符串,即jsonObjects为空。

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

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

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

2 个答案:

答案 0 :(得分:31)

JSON标准强制要求双引号。

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

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

答案 1 :(得分:2)

为了补充Javier所说的,JSON主要出于安全原因限制格式(因此无法调用函数等)。如果您不关心安全性,请使用javascript的“eval()”函数将字符串转换为对象。