可以引用 JSON 数字吗?
Posted
技术标签:
【中文标题】可以引用 JSON 数字吗?【英文标题】:Can JSON numbers be quoted? 【发布时间】:2013-02-28 09:06:26 【问题描述】:JSON 数字周围可以有引号吗?在大多数搜索链接中,数字似乎并不“需要”引号。但是,解析器是否应该同时接受"attr" : 6
和"attr" : "6"
?
如果MyParser
有一个方法getInt
来获取给定键的数字,MyParser.getInt("attr")
在这两种情况下都应该返回6
,还是在后一种情况下抛出异常?
【问题讨论】:
读者也应该知道this 【参考方案1】:在JSON 中,6
是数字六。 "6"
是一个 string,包含 digit 6
。所以“可以引用json数字吗?”这个问题的答案基本上是“不”,因为如果你把它们放在引号里,它们就不再是数字了。
但是,解析器是否应该同时接受
"attr" : 6
和"attr" : "6"
?
是的,但它们定义不同的东西。第一个定义了一个attr
属性,其值为6
(一个数字)。第二个定义了一个attr
属性,其值为"6"
(一个包含单个数字的字符串)。
(最初问的问题是关于attr: "6"
,这是无效的,因为属性名在JSON中必须用双引号括起来。)
如果 MyParser 有一个方法 getInt 来获取给定键的数字,MyParser.getInt("attr") 应该在两种情况下都返回 6 还是在后一种情况下抛出异常?
这是提供解析器的人的设计决定,基本上是在 getInt
严格(如果您在 "attr": "6"
上尝试时抛出异常)或松散(将 "6"
强制为 6
并返回它)之间的选择)。 javascript 通常是松散的,因此可能存在松散的争论;相反,JavaScript 松散的事实有时会引起麻烦,这可能是严格的论据。
【讨论】:
【参考方案2】:这取决于您用于获取整数的语言,因为如果编程语言不提供从字符串到整数的隐式转换,您可能会遇到问题。
您不必太担心,因为现在的现代编程语言可以将字符串隐式转换为数字,而无需额外的代码。您应该考虑的是,在使用 JavaScript 等编程语言时,当您使用 ==
和 ===
比较值时,===
会考虑值的类型,而 ==
不会,所以 6 === "6"
将返回false
,而6 == "6"
将返回true
。
回答您的问题,如果您使用的编程语言提供从字符串到整数的隐式转换,它不会引发异常。
【讨论】:
请记住,有一个很好的论据,即严格 === 比较比模糊 == 比较快一些:***.com/q/8044750/2430549【参考方案3】:您可以引用该数字。两者都是有效的(“attr”:6 和“attr”:“6”) 唯一需要记住的是,在提取值时,您需要在第一种情况下使用 GetInt(),在第二种情况下使用 GetString(),然后将该字符串转换为整数。
【讨论】:
OP 描述的getInt()
方法适用于一个名为“MyParser”的解析器软件包。我不认为它是一个真正的解析器。以上是关于可以引用 JSON 数字吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用 mysql JSON_SEARCH:为啥我必须引用数字?
你相信吗??Python把数字也当做对象!@@@对象,名称绑定,引用计数