【问题标题】:Can hex format be used with JSON files? If so, how?十六进制格式可以与 JSON 文件一起使用吗?如果是这样,怎么做?
【发布时间】:2019-03-11 07:42:55
【问题描述】:

以下对象是纯 Javascript 中的有效对象。但是,如果将其添加到 JSON 文件中,则该文件不会通过验证。这是为什么呢?

var message = {
    "senderID": [ 0x01 ],
    "receiverID": [ 0xFF ],
    "commandCode": [ 0x00, 0x05 ],
    "payload": [ 0xFF ]
}

【问题讨论】:

    标签: javascript json


    【解决方案1】:

    JSON 规范支持将 数字 作为值,但明确不支持八进制或十六进制。这部分是为了增加语言之间的交流。您可以轻松地将0xFF 表示为字符串,"0xFF" 并在使用时将其解析出来。


    来自json.org

    数字与 C 或 Java 数字非常相似,只是不使用八进制和十六进制格式。

    根据ECMA-404 Final draft

    数字是一系列十进制数字,没有多余的前导零。它可能有一个前面的减号 符号 (U+002D)。它可能有一个以小数点 (U+002E) 为前缀的小数部分。它可能有一个指数, 前缀为 e (U+0065) 或 E (U+0045) 以及可选的 + (U+002B) 或 – (U+002D)。数字是代码 点 U+0030 到 U+0039。

    规范还解释了为什么这种限制对生产者和消费者都有利:

    JSON 与数字的语义无关。在任何编程语言中,都可以有各种容量和补码、固定或浮点、二进制或十进制的各种数字类型。这会使不同编程语言之间的交换变得困难。 JSON 仅提供人类使用的数字表示:数字序列。所有编程语言都知道如何理解数字序列,即使它们在内部表示上存在分歧。这足以允许交换。

    【讨论】:

    • 不支持十六进制如何增加语言之间的互换性?
    • @Ivella 我已经用规范的解释更新了我的答案。
    【解决方案2】:

    JSON 不支持十六进制数字,但它们在 JSON5 中受支持。 json5.org

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2015-06-24
      • 1970-01-01
      • 2012-04-08
      • 2021-06-30
      • 2023-04-07
      • 2013-04-02
      相关资源
      最近更新 更多