可以引用JSON号码吗?

Unr*_*ser 38 string quotes parsing json numbers

JSON号码周围可以有引号吗?在大多数搜索链接中,似乎数字不需要"引号".但是,如果解析器同时接受"attr" : 6"attr" : "6"

如果MyParser有一个方法getInt来获取给定密钥的数字,应该在两种情况下都MyParser.getInt("attr")返回6,或者在后一种情况下抛出异常?

T.J*_*der 74

JSON中,6是第六位."6"是包含数字字符串.那么问题的答案是"可以引用json数字吗?" 基本上是"不",因为如果你把它们放在引号中,它们就不再是数字了. 6

但是,如果解析器同时接受"attr":6和attr:"6"?

第二个例子无效,因为attr必须在引号中,例如:

{"attr": "6"}
Run Code Online (Sandbox Code Playgroud)

...有效,并attr使用字符串值定义具有属性的对象"6",而:

{"attr": 6}
Run Code Online (Sandbox Code Playgroud)

...是有效的,并定义了一个attr带有数字值的属性的对象6,最后:

{attr: 6}
Run Code Online (Sandbox Code Playgroud)

...和

{attr: "6"}
Run Code Online (Sandbox Code Playgroud)

...都是无效的JSON,因为属性名称必须是双引号.

如果MyParser有一个方法getInt来获取给定键的数字,MyParser.getInt("attr")在两种情况下都应该返回6还是在后一种情况下抛出异常?

对于提供解析器的人来说,这是一个设计决定,基本上getInt是严格的选择(如果你尝试它就抛出异常"attr": "6")或松散(强制"6"转换6并返回).JavaScript通常是松散的,因此可能存在松散的争论; 相反,JavaScript松散的事实有时会引起麻烦,这可能是严格的论据.