对比
BSON 与 JSON
BSON 是带长度前缀的二进制文档格式,结构类似 JSON,并额外提供日期、二进制值和 ObjectId 等类型。JSON 是 RFC 8259 定义的文本格式,优势是易读且工具支持广泛。
应该选择哪种格式?
MongoDB 兼容文档或需要明确日期、二进制、标识符类型时,可考虑 BSON。人工检查、Web API 和文本配置通常更适合 JSON。
适用于 BSON
序列化 MongoDB 文档 · 在支持 BSON 的工具之间交换文档
- 保留日期和二进制数据等类型
- 使用能够读写 BSON 的驱动程序和工具
适用于 JSON
Web API、配置文件和数据交换
- 传递结构化数据
基本信息
| 项目 | BSON | JSON |
|---|---|---|
| 扩展名 | .bson | .json |
| MIME 类型 | application/bson | application/json |
| 常见用途 | 序列化 MongoDB 文档 · 在支持 BSON 的工具之间交换文档 | Web API、配置文件和数据交换 |
| 打开方式 | 可用 mongorestore 或支持 BSON 的工具、程序库读取。要查看内容,可先转换为 Extended JSON 等可读表示。不要用文本编辑器修改二进制文件。 | 可使用文本编辑器、IDE或支持JSON的查看器打开。 |
| 导出或转换 | 转换为 JSON 时,日期、ObjectId 和二进制值可能需要使用 Extended JSON 写法或应用专用表示,因为标准 JSON 没有对应类型。如果需要往返转换,应选择能保留类型信息的方法,并用实际数据测试。 | 可使用应用程序或转换工具将其转换为CSV等格式。 |
按用途选择
保留日期和二进制数据等类型
序列化 MongoDB 文档 · 在支持 BSON 的工具之间交换文档
BSON使用能够读写 BSON 的驱动程序和工具
序列化 MongoDB 文档 · 在支持 BSON 的工具之间交换文档
BSON传递结构化数据
Web API、配置文件和数据交换
JSON关键点 1
BSON 以二进制保存文档长度和元素类型,包括 date、binary、ObjectId。JSON 是文本,核心类型中没有专用日期或字节串类型。
进一步了解差异关键点 2
BSON 区分 int32、int64 和 double。JSON 数字没有这些类型标签,因此不同运行环境对范围和精度的处理可能不同。
进一步了解差异进一步了解差异
数据库或协议明确要求 BSON 类型和文档封装时使用 BSON。重视文本互操作和人工检查时使用 JSON。明确特殊值的映射,并用实际驱动和消费者测试。
- BSON 并非简单地把 JSON 序列化成二进制;其规范定义了带显式长度和 BSON 专有值的类型化文档表示。
- BSON 转 JSON 时可能丢失 ObjectId 身份、日期精度或时区约定、binary subtype、Decimal128 行为、整数精度或重复键语义。
- 检查数值范围、数组顺序、嵌入文档、null 与字段缺失、二进制编码以及扩展 JSON 表示的约定。
常见问题
标准 JSON 能直接表示所有 BSON 值吗?
不能。JSON 没有原生 ObjectId、日期或任意字节串类型。应用会使用约定或 Extended JSON,双方必须事先一致。