可以引用 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把数字也当做对象!@@@对象,名称绑定,引用计数

如何将 JSON 字符串转换为数字?

JSONModel - 键是一个数字,我可以通过偏移来获取孩子吗?

php protobuf不能为null吗

具有固定数量数字的列