BSON 解析器

BSON(Binary JSON)是 MongoDB 内部用于存储文档的二进制序列化格式。它在 JSON 基础上扩展了 ObjectId、Date、Binary 和 Decimal128 等附加类型。此工具可解析 BSON 文件,并以带类型信息的 JSON 形式显示内容。

规范

常见用例

  • 检查 MongoDB 转储文件(.bson)
  • 调试消息队列或缓存中的 BSON 数据
  • 分析 MongoDB 线协议捕获
  • 将 BSON 转换为 JSON 供外部工具使用
  • 审查文档结构和类型

功能

  • 通过拖放或文件选择解析 BSON 二进制文件
  • 解码十六进制编码的 BSON 数据
  • 显示所有 BSON 类型,包括 ObjectId、Date、Binary、Regex、Decimal128
  • 使用扩展 JSON 表示法转换为 JSON
  • 显示文档元数据(大小、字段数、最大深度)
  • 列出文档中所有的 ObjectId 和日期
  • 显示二进制字段大小和扩展类型
  • 用于原始二进制检查的十六进制查看器

示例

简单 BSON 文档

试试看 →

一个包含单个字段的最小 BSON 文档:{"hello":"world"}

16 00 00 00 02 68 65 6c 6c 6f 00 06 00 00 00 77 6f 72 6c 64 00 00

十六进制编码的 BSON

试试看 →

一个包含字符串、数字和布尔值的 BSON 文档:{"name":"Alice","age":30,"active":true}

27 00 00 00 02 6e 61 6d 65 00 06 00 00 00 41 6c 69 63 65 00 10 61 67 65 00 1e 00 00 00 08 61 63 74 69 76 65 00 01 00

提示

  • 你可以直接粘贴十六进制编码的 BSON 数据来解析。
  • BSON 文件可通过以下命令创建:mongoexport --collection=users --out=users.bson
  • ObjectId 包含时间戳;可通过 new ObjectId().getTimestamp() 提取。
  • BSON 支持比 JSON 更多的类型:日期、二进制、正则表达式和小数。
  • MongoDB 中 BSON 文档的最大大小为 16MB。

理解 BSON 解析器

BSON(Binary JSON)是 MongoDB 内部用于存储和传输文档的二进制序列化格式。JSON 将所有数据表示为字符串、数字、布尔值、数组和对象,而 BSON 在此基础上扩展了数据库所需的附加类型:ObjectId(12 字节的唯一标识符)、Date(毫秒精度的时间戳)、Binary(任意字节数组)、Decimal128(精确十进制运算)以及正则表达式。

BSON 文档采用长度前缀格式,即每个文档和嵌入文档都以 4 字节的大小字段开头。这允许解析器在不完全解码的情况下跳过文档,从而实现高效的扫描和索引。每个元素都标记有类型字节,后跟作为 C 字符串的字段名,再后跟类型特定编码的值。

MongoDB 在内部以 BSON 存储文档,通过线协议传输文档,并使用 mongodump 将其导出为 .bson 文件。理解 BSON 对于调试 MongoDB 应用程序、分析转储文件以及处理线协议至关重要。扩展 JSON 格式提供了一种保留 BSON 类型信息的人类可读表示。

BSON 并不总是比 JSON 小。短字符串和小数字在 BSON 中可能实际上更大,因为类型字节和长度前缀会带来开销。BSON 的优势不在于大小而在于速度——长度前缀格式支持快速遍历,扩展类型则为日期、二进制数据和高精度小数提供了原生支持,无需编码约定。

ObjectId 是一种 12 字节的 BSON 类型,用作 MongoDB 文档中默认的 _id。它包含 4 字节的时间戳(自纪元以来的秒数)、5 字节的随机值(每台机器/进程唯一)和 3 字节的递增计数器。这种设计确保了跨分布式服务器的唯一性,无需任何协调。嵌入的时间戳意味着你可以通过 ObjectId.getTimestamp() 提取文档的创建时间。

mongodump 创建的 MongoDB 转储文件(.bson)是原始 BSON 文档的串联。你可以将十六进制编码的 BSON 数据粘贴到此工具中来解析单个文档。此外,bsondump 工具(包含在 MongoDB Database Tools 中)可以在命令行将 .bson 文件转换为 JSON,以便批量检查。

← 返回所有工具