Format Atlas

对比

BSON 与 JSON

BSON 是带长度前缀的二进制文档格式,结构类似 JSON,并额外提供日期、二进制值和 ObjectId 等类型。JSON 是 RFC 8259 定义的文本格式,优势是易读且工具支持广泛。

应该选择哪种格式?

MongoDB 兼容文档或需要明确日期、二进制、标识符类型时,可考虑 BSON。人工检查、Web API 和文本配置通常更适合 JSON。

适用于 BSON

序列化 MongoDB 文档 · 在支持 BSON 的工具之间交换文档

  • 保留日期和二进制数据等类型
  • 使用能够读写 BSON 的驱动程序和工具

适用于 JSON

Web API、配置文件和数据交换

  • 传递结构化数据

基本信息

项目BSONJSON
扩展名.bson.json
MIME 类型application/bsonapplication/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,双方必须事先一致。

了解详情

参考资料与规范