51

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

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

4

3 回答 3

88

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

但是,解析器应该同时接受"attr" : 6"attr" : "6"吗?

是的,但它们定义了不同的东西。第一个定义attr具有值6(数字)的属性。第二个定义了一个attr带有值的属性"6"(一个包含单个数字的字符串)。

(最初询问的问题attr: "6"是无效的,因为 JSON 中的属性名称必须用双引号括起来。)

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

这是提供解析器的人的设计决定,基本上是在getInt严格(如果您尝试它会抛出异常"attr": "6")或松散(强制"6"6返回)之间进行选择。JavaScript 通常是松散的,因此可能存在松散的争论;相反,JavaScript 松散的事实有时会导致麻烦,这可能是严格的论据。

于 2013-03-12T17:40:11.747 回答
3

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

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

回答您的问题,如果您使用提供从字符串到 int 的隐式转换的编程语言,它不会引发异常。

于 2013-03-12T17:50:14.157 回答
-2

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

于 2018-04-13T22:03:30.217 回答