可以引用JSON号码吗?

时间:2013-03-12 17:38:37

标签: json string parsing numbers quotes

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

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

3 个答案:

答案 0 :(得分:69)

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

  

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

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

{"attr": "6"}

...有效,并使用字符串attr定义一个名为"6"的属性的对象,而:

{"attr": 6}

...有效,并使用 number attr定义一个名为6的属性的对象,最后:

{attr: 6}

...和

{attr: "6"}

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

  

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

这是提供解析器的人的设计决策,基本上是getInt严格(如果你在"attr": "6"上尝试抛出异常)或松散(强制"6"6并返回)。 JavaScript通常是松散的,因此可能存在松散的争论;相反,JavaScript松散的事实有时会带来麻烦,这可能是严格的论据。

答案 1 :(得分:3)

这将取决于您用于获取整数的语言,因为如果编程语言不提供从字符串到int的隐式转换,则可能会出现问题。

您不必过于担心,因为现在的现代编程语言可以隐式地将字符串转换为数字,而无需额外的代码。您应该考虑的一点是,当使用JavaScript之类的编程语言时,在比较值时使用=====时,===会在==时考虑值的类型不是,因此6 === "6"将返回false,而6 == "6"将返回true

回答你的问题,如果你使用的是一种提供从string到int的隐式转换的编程语言,它就不会抛出异常。

答案 2 :(得分:-1)

您可以引用该号码。两者都有效(" attr":6和" attr":" 6") 唯一需要记住的是,在提取值时,您需要在第一种情况下使用GetInt(),在第二种情况下使用GetString(),然后将该字符串转换为整数。