相关疑难解决方法(0)

JSON键是否必须用引号括起来?

示例:以下代码是否对JSON规范有效?

{
    precision: "zip"
}
Run Code Online (Sandbox Code Playgroud)

或者我应该总是使用以下语法?(如果是这样,为什么?)

{
    "precision": "zip"
}
Run Code Online (Sandbox Code Playgroud)

我在JSON规范中没有真正发现这个问题.虽然他们在示例中使用了键周围的引号.

json specifications standards-compliance

217
推荐指数
5
解决办法
7万
查看次数

在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中评估时,上述两种表示之间是否存在语义差异?

javascript json

90
推荐指数
2
解决办法
2万
查看次数

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

我正在使用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工作.

javascript firefox json

14
推荐指数
1
解决办法
6795
查看次数

YAML作为JSON超集和TAB字符

我无法准确找到对此错误的引用,但是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也不允许使用标签?或者规范在这种情况下允许标签,但实现还没有?)

谢谢.

whitespace tabs json yaml

11
推荐指数
2
解决办法
2447
查看次数