以下对象是纯Java语言中的有效对象。但是,如果将相同的内容添加到JSON文件,则该文件不会通过验证。为什么会这样?
var message = {
"senderID": [ 0x01 ],
"receiverID": [ 0xFF ],
"commandCode": [ 0x00, 0x05 ],
"payload": [ 0xFF ]
}
答案 0 :(得分:4)
JSON不支持十六进制数字,但JSON5支持它们。 json5.org
答案 1 :(得分:1)
JSON规范支持数字作为值,但明确不支持八进制或十六进制。这部分是为了增加语言之间的互换性。您可以轻松地将0xFF
表示为字符串"0xFF"
并在使用时将其解析出来。
来自json.org:
数字非常类似于C或Java数字,除了不使用八进制和十六进制格式。
数字是十进制数字序列,没有多余的前导零。它可能有一个减号 符号(U + 002D)。它的分数部分可能以小数点(U + 002E)为前缀。它可能有一个指数, 前缀为e(U + 0065)或E(U + 0045),以及可选的+(U + 002B)或–(U + 002D)。数字是代码 指向U + 0030到U + 0039。
答案 2 :(得分:0)
由于舍入误差,交换不是 100% 准确。例如,在读取 -10.631768226623536 时,Python 将其设为 -10.631768226623535,而 C++ 设为 -10.631768226623536。这是因为 Python 和 C++ 处理舍入误差的方式不同。 如果 Json 支持十六进制数,就不会出现这种不一致的情况。
(这不是答案。它是对上面答案的评论,但不小心添加为答案。)