【问题标题】:Can JSON numbers be quoted?可以引用 JSON 数字吗?
【发布时间】:2013-02-28 09:06:26
【问题描述】:

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

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

【问题讨论】:

  • 读者也应该知道this

标签: json string parsing numbers quotes


【解决方案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

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

    【讨论】:

    【解决方案3】:

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

    【讨论】:

    • OP 描述的getInt() 方法适用于一个名为“MyParser”的解析器软件包。我不认为它是一个真正的解析器。
    猜你喜欢
    • 1970-01-01
    • 2021-12-19
    • 2020-12-14
    • 2010-09-29
    • 2016-07-11
    • 2019-01-21
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多