BSON 全称 Binay JSON,意为二进制 JSON。
BSON 是一种能用来表示简单数据结构、关联数组的数据类型,目前主要被用于 MongoDB 数据库的数据存储和网络传输。
BSON 对象(文档)是由一个有序的元素列表组成,每个元素有字段名、类型、值组成。
BSON 名义上是 JSON 数据的超集,支持 date 和 字节数组,但是有个特殊的地方没有通用数字(number)类型。
BSON 主要着眼于提高扫描效率,因此对于大型元素提供长度字段作为前缀,包括显示数组索引等,因此想多而言占用的空间较 JSON 大。
BSON 数据序列化格式支持如下格式:
由于 BSON 是二进制格式的数据,仅仅通过文本形式我们无法感知到其与 JSON 格式的区别。
{
"name": "mebugs",
"size": 18,
"born": new Date("25/05/2005")
}
官方语法规范:https://bsonspec.org/spec.html
以下基本类型在语法的其余部分用作终结符。每种类型都必须以小端格式序列化。
类型 | 长度 | 描述 |
---|---|---|
byte | 1 byte | 8位 |
int32 | 4 bytes | 32位有符号整数,二进制补码 |
int64 | 8 bytes | 64位有符号整数,二进制补码 |
uint64 | 8 bytes | 64位无符号整数 |
double | 8 bytes | 64位IEEE754-2008二进制浮点数 |
decimal128 | 16 bytes | 128位IEEE754-2008十进制浮点数 |
BSON 语法的其余部分。
请注意,带引号的字符串表示终结符,应使用 C 语义进行解释。
例如"x01"表示 byte 0000 0001。
使用 * 运算符作为重复的简写(例如("x01"*2) is "x01x01")。
当用 * 作一元运算符时,意味着重复可以发生 0 次或多次。
类型 | 格式 | 描述 |
---|---|---|
document | int32 e_list "x00" | 文档=文档的长度(int32)+元素列表+"x00" |
document.e_list | element e_list | 元素列表=一个元素+元素列表 |
element | "x01" e_name double | 元素类型:"x01"+元素名+double |
"x02" e_name string | 元素类型:"x02"+元素名+string | |
"x03" e_name document | 嵌入文档(子文档) | |
"x04" e_name document | 数组 | |
"x05" e_name binary | 二进制数据 | |
"x06" e_name | 未定义的(值)-已弃用 | |
"x07" e_name (byte*12) | 对象ID,即MongoDB中默认的"_id"的类型。12字节。 | |
"x08" e_name "x00" | 布尔值false | |
"x08" e_name "x01" | 布尔值true | |
"x09" e_name int64 | UTC 日期时间 | |
"x0A" e_name | 空值,如:null | |
"x0B" e_name cstring cstring | 正则表达式 - 第一个 cstring 是正则表达式模式,第二个是正则表达式选项字符串。 | |
"x0C" e_name string (byte*12) | DBPointer—已弃用 | |
"x0D" e_name string | JavaScript代码 | |
"x0E" e_name string | 符号—已弃用 | |
"x0F" e_name code_w_s | 带作用域的 JavaScript代码—已弃用 | |
"x10" e_name int32 | 32位整数 | |
"x11" e_name uint64 | 时间戳 | |
"x12" e_name int64 | 64位证书 | |
"x13" e_name decimal128 | 128位十进制浮点数 | |
"xFF" e_name | 最小键 | |
"x7F" e_name | 最大键 | |
e_name | cstring | 元素名(键名) |
string | int32 (byte*) "x00" | 字符串,长度+内容+"x00" |
cstring | (byte*) "x00" | 字符串,内容+"x00" |
binary | int32 subtype (byte*) | 二进制数据,长度+类型+内容 |
subtype | "x00" | 二进制子类型,通用 |
"x01" | 功能 | |
"x02" | 二进制(旧) | |
"x03" | UUID(旧) | |
"x04" | UUID | |
"x05" | MD5 | |
"x06" | 加密的 BSON 值 | |
"x80" | 用户定义 | |
code_w_s | int32 string document | 带范围的代码 -已弃用 |
本示例来自网络,参考上方的规范表,会更加容易理解其存储方式。
当前还没有观点发布,欢迎您留下足迹!