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,以便批量检查。