CBOR (Concise Binary Object Representation) 是一种二进制数据序列化格式,由 IETF 在 RFC 8949 中标准化。它设计用于在资源受限的环境中高效传输数据,兼具 JSON 的灵活性和二进制的高效性。
CBOR 基于 JSON 的数据模型(数字、字符串、数组、映射等),但采用二进制编码,因此体积更小、解析更快,特别适合物联网、WebAuthn、COSE 等场景。
| 特性 | CBOR | JSON |
|---|---|---|
| 数据格式 | 二进制 | 文本 (UTF-8) |
| 体积大小 | 通常更小(节省 20%~50% 空间) | 较大(冗余的括号、引号) |
| 解析速度 | 快速(二进制原生解析) | 较慢(需要文本解析) |
| 数据类型 | 支持更多类型(如字节串、简单值、时间戳) | 仅字符串、数字、布尔、null、对象、数组 |
| 可读性 | 不可直接阅读(需工具转换) | 人类可读 |
| 应用场景 | 物联网、加密消息、高效存储 | Web API、配置文件 |
CBOR 和 Protobuf 都是高效的二进制序列化格式,但设计理念不同:
简单来说:CBOR = JSON 的二进制版 + 扩展类型,无需 Schema;Protobuf = 高性能 RPC 标准,需要 Schema。
WebAuthn 规范使用 CBOR 编码认证数据(Authenticator Data),例如公钥凭证、客户端数据。
在低带宽、低功耗设备间传输传感器数据,CBOR 的紧凑性极具优势。
COSE 是 IETF 标准,用于对 CBOR 数据进行签名和加密,广泛应用于 JWT 替代方案。
需要存储大量结构化数据时,CBOR 比 JSON 节省磁盘空间,且解析速度更快。
两者都是二进制 JSON 替代品,但 CBOR 是 IETF 标准(RFC 8949),包含更多内置类型(如字节串、简单值),且支持确定性编码;MessagePack 则更早出现,社区支持广泛。
几乎所有主流语言都有 CBOR 实现:PHP (2tvenom/cborencode), Python (cbor2), JavaScript (cbor-js), Go (fxamacker/cbor), Rust (ciborium) 等。
对于典型对象,CBOR 通常比 JSON 小 20%~40%;对于数字和二进制数据,优势更明显。
您可以使用本站的 CBOR Decoder 工具 进行反向转换。