JSON号码周围可以有引号吗?在大多数搜索链接中,似乎数字不需要“引号”。但是,解析器是否应同时接受"attr" : 6
和"attr" : "6"
?
如果MyParser
有方法getInt
来获取给定密钥的数字,那么MyParser.getInt("attr")
在两种情况下都应该返回6
,还是在后一种情况下抛出异常?
答案 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(),然后将该字符串转换为整数。