MessagePack / CBOR 编解码
数据互转
正在载入
正在加载工具
工具代码会在打开时按需载入,请稍候。
本工具的全部运算都发生在你的浏览器中,输入内容不会发送到任何服务器。
关于这个工具
编码 JSON 或带类型 JSON,在本地检查二进制数据,不上传输入。 普通 JSON 的整数词元精确保留;小数/指数使用 binary64,必须能往返为同一十进制值。字节、非字符串键及特殊值请使用带类型 JSON。解码始终输出带类型 JSON。
常见用途
- 在本地检查 .msgpack 或 .cbor 文件,无需上传。
- 将 API 测试数据在 JSON、带类型 JSON、Hex 与 Base64 之间转换。
- 验证精确 64 位标识符、二进制字段和非字符串映射键。
使用方法
- 1.选择 MessagePack 或 CBOR,以及编码或解码。
- 2.编码时选择普通或带类型 JSON;解码时粘贴 Hex/Base64 或选择二进制文件。
- 3.转换后检查完整带类型输出,可复制或下载。解码后的二进制下载保留源字节;取消或修改输入会丢弃旧结果。
带类型输入的精确示例
示例 1 · msgpack
msgpack ["null"]
c0
选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。
示例 2 · cbor
cbor ["null"]
f6
选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。
示例 3 · msgpack
msgpack ["int","9007199254740993"]
cf0020000000000001
选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。
示例 4 · cbor
cbor ["int","18446744073709551615"]
1bffffffffffffffff
选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。
示例 5 · msgpack
msgpack ["bytes","00ff"]
c40200ff
选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。
示例 6 · cbor
cbor ["bytes","00ff"]
4200ff
选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。
示例 7 · msgpack
msgpack ["float","-0"]
cb8000000000000000
选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。
示例 8 · cbor
cbor ["map",[[["int","7"],["str","x"]]]]
a1076178
选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。
示例 9 · msgpack
msgpack ["ext",7,"00ff"]
d50700ff
选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。
示例 10 · cbor
cbor ["tag","2",["bytes","010000000000000000"]]
c249010000000000000000
选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。
示例 11 · cbor
cbor ["undefined"]
f7
选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。
示例 12 · cbor
cbor ["simple",16]
f0
选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。
示例 13 · msgpack
msgpack ["array",[["bool",true],["str","猫"]]]
92c3a3e78cab
选择该二进制格式及带类型 JSON 编码;下方为完整预期 Hex 输出。
常见输入错误
- 映射或对象有重复键;未丢弃任何值。
- 请使用规范标准 Base64,保留必需的填充。
- 不支持不定长 CBOR。
- 整数超出该格式原生范围;需要时可使用 CBOR 大数标签及字节。
- 映射键仅支持字符串、整数、字节、布尔或 null。
限制与说明
- 二进制输入/输出不超过 262,144 字节;文本不超过 1,048,576 UTF-8 字节;带类型输出不超过 2,097,152 字节。JSON 语法和二进制值:深度不超过 32,值数量不超过 10,000。工作线程限时 5 秒。
- 映射键仅支持字符串、整数、字节、布尔或 null;拒绝重复键。CBOR 标签原样保留(含大数标签);MessagePack 扩展 -1 检查原始时间戳格式,0–127 作为不透明数据保留。不解释标签,不支持不定长、复合/浮点键或连续多个值。
- MessagePack 原生整数范围为 −2^63 至 2^64−1;CBOR 为 −2^64 至 2^64−1。更大的 CBOR 整数使用不透明标签 2/3 加字节串表示。整数元组文本最多 128 字符。
- Float16/32/64 解码为 binary64 语义值。负零、NaN 和无穷使用显式元组;编码浮点使用 float64。重新编码不保留原宽度和 NaN 载荷位。
- JSON 语法本身限制 32 层及 10,000 个值,带类型 JSON 的包装也计入,因此可能先于二进制 32 层达到限制。输出超限会拒绝,不会截断。
常见问题
为什么解码结果不是普通 JSON?
JSON 原生不支持字节、扩展、标签、undefined、NaN 或非字符串键。每个值使用明确的带类型元组,用户对象不会误变成控制标记。
CBOR 标签会被验证或执行吗?
标签保留无符号 64 位编号及原始包裹值;不解释日期、大数、嵌入 CBOR、URL、正则等应用含义,也不验证其业务载荷。不会执行嵌入字节或代码。
能恢复完全相同的二进制吗?
解码后下载二进制会保留原始字节。解码后重新编码保留受支持的语义值,但宽度或 NaN 位可能不同。映射保留输入顺序,不声称规范化编码。
0.1 会怎样处理?
编码为最接近的 binary64 值,以显式浮点元组表示。十进制词元必须通过 binary64 最短十进制表示往返而不改变十进制值;过高精度、溢出和非零下溢会拒绝。
- RFC 8949 · CBOR
- MessagePack specification
- MessagePack JavaScript implementation
- cbor2 JavaScript implementation