对比
CBOR 与 JSON
CBOR 是一种扩展 JSON 数据模型的二进制交换格式,可表示字节串和标签等值。JSON 是便于阅读的文本交换格式,广泛用于 Web API 和配置工具。
应该选择哪种格式?
需要人工编辑或检查的文本,以及兼容现有 JSON API 时选择 JSON。协议需要紧凑二进制数据、字节串、扩展类型或确定性编码时,可考虑 CBOR。
适用于 CBOR
在受限设备和网络中交换结构化数据 · 在 COSE 和物联网协议中表示数据
- 以紧凑二进制形式表示类似 JSON 的数据
- 使用标准标签或应用自定义标签说明值的含义
适用于 JSON
Web API、配置文件和数据交换
- 传递结构化数据
基本信息
| 项目 | CBOR | JSON |
|---|---|---|
| 扩展名 | .cbor | .json |
| MIME 类型 | application/cbor | application/json |
| 常见用途 | 在受限设备和网络中交换结构化数据 · 在 COSE 和物联网协议中表示数据 | Web API、配置文件和数据交换 |
| 打开方式 | 使用 CBOR 程序库或解码器读取,再通过诊断表示或类似 JSON 的视图检查内容。对于标签和字节串等无法直接映射到 JSON 的值,应确认其显示方式。 | 可使用文本编辑器、IDE或支持JSON的查看器打开。 |
| 导出或转换 | 转换为 JSON 时,字节串和带标签的值可能需要工具专用的表示方式,因为 JSON 没有直接对应类型。用于签名、哈希或缓存键时,应遵循协议约定的编码规则,例如 RFC 8949 中的确定性编码。 | 可使用应用程序或转换工具将其转换为CSV等格式。 |
按用途选择
以紧凑二进制形式表示类似 JSON 的数据
在受限设备和网络中交换结构化数据 · 在 COSE 和物联网协议中表示数据
CBOR使用标准标签或应用自定义标签说明值的含义
在受限设备和网络中交换结构化数据 · 在 COSE 和物联网协议中表示数据
CBOR传递结构化数据
Web API、配置文件和数据交换
JSON关键点 1
JSON 是字符表示的文本;CBOR 数据项是二进制字节。CBOR 可直接表示整数、字节串和标签,而 JSON 通常需用 base64 字符串等约定表示二进制值。
进一步了解差异关键点 2
RFC 8259 JSON 定义对象、数组、字符串、数字、布尔值和 null,不要求应用模式。CBOR 增加带标签的值,数据模型超出 JSON。
进一步了解差异进一步了解差异
可检查的文本接口和广泛工具支持适合 JSON。需要字节串、标签或确定性编码的二进制协议可用 CBOR。双方应约定标签含义、数值范围、规范化规则和库支持。
- CBOR 诊断表示用于调试,实际交换的是二进制数据项;JSON 交换的是文本。
- CBOR 转 JSON 可能丢失标签、字节串区别、整数表示、数值精度或确定性编码属性。
- 明确未知标签、大整数、重复 map 键以及 JSON 无直接对应值的处理方式,并用真实消息测试双方实现。
常见问题
CBOR 只是压缩后的 JSON 吗?
不是。CBOR 有独立的二进制数据模型,支持 JSON 无法原生表示的字节串和标签等值。