示例:以下代码是否对JSON规范有效?
{
precision: "zip"
}
Run Code Online (Sandbox Code Playgroud)
或者我应该总是使用以下语法?(如果是这样,为什么?)
{
"precision": "zip"
}
Run Code Online (Sandbox Code Playgroud)
我在JSON规范中没有真正发现这个问题.虽然他们在示例中使用了键周围的引号.
JSON规范说JSON是一个对象或数组.在物体的情况下,
对象结构表示为围绕零个或多个名称/值对(或成员)的一对花括号. 名称是一个字符串. ...
后来,规范说一个字符串被引号括起来.
为什么?
从而,
{"Property1":"Value1","Property2":18}
Run Code Online (Sandbox Code Playgroud)
并不是
{Property1:"Value1",Property2:18}
Run Code Online (Sandbox Code Playgroud)
问题1:为什么不允许名称/值对中的名称是不带引号的标识符?
问题2:在Javascript中评估时,上述两种表示之间是否存在语义差异?
我正在使用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工作.
我无法准确找到对此错误的引用,但是YAML 1.2说它是JSON超集,如果我在JSON中使用制表符,则会将其视为错误.
例如
"root": {
"key": "value"
}
Run Code Online (Sandbox Code Playgroud)
(这里的在线验证说明了'\t' that cannot start any token)
我知道为什么YAML历史上不允许使用制表符,但我怎样才能在JSON-superset的上下文中解释它?
(例如,YAML不是实际超集还是JSON也不允许使用标签?或者规范在这种情况下允许标签,但实现还没有?)
谢谢.