十六进制格式可以与 JSON 文件一起使用吗?如果是这样,怎么做?
Posted
技术标签:
【中文标题】十六进制格式可以与 JSON 文件一起使用吗?如果是这样,怎么做?【英文标题】:Can hex format be used with JSON files? If so, how? 【发布时间】:2022-01-01 08:22:20 【问题描述】:以下对象是纯 javascript 中的有效对象。但是,如果将其添加到 JSON 文件中,则该文件不会通过验证。这是为什么呢?
var message =
"senderID": [ 0x01 ],
"receiverID": [ 0xFF ],
"commandCode": [ 0x00, 0x05 ],
"payload": [ 0xFF ]
【问题讨论】:
【参考方案1】:JSON 不支持十六进制数字,但它们在 JSON5 中受支持。 json5.org
【讨论】:
【参考方案2】: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 我已经用规范的解释更新了我的答案。以上是关于十六进制格式可以与 JSON 文件一起使用吗?如果是这样,怎么做?的主要内容,如果未能解决你的问题,请参考以下文章
我可以将 VC9 编译的 PHP 与 Apache 一起使用吗?