JSON二进制表示、类型恢复及BSON相关技术疑问咨询
JSON与BSON:序列化/反序列化及类型恢复详解
JSON的二进制表示
JSON本质是文本格式,序列化后的二进制形式就是它的UTF-8编码(JSON规范推荐使用UTF-8,也是业界最常用的实现)。举个例子:
- 数字
5序列化后就是UTF-8字符'5'(十六进制0x35) - 字符串
"5"序列化后是'"'(0x22) +'5'+'"'的UTF-8字节序列
注意:JSON语法要求字符串必须用双引号包裹,单引号'5'属于不合法的JSON格式。
反序列化如何恢复数据类型
反序列化不是单纯靠“有无引号”瞎推断,而是严格遵循JSON的语法规则做解析:
- 解析器会按顺序扫描字符,识别不同类型的语法特征:
- 无引号包裹、符合数字语法(可选正负号、整数/小数结构、可选指数部分)的内容,会被判定为数字类型
- 双引号包裹的内容直接识别为字符串
- 同时还会精准识别
true/false/null、数组[]、对象{}等其他类型
- 现代JSON解析器(比如浏览器的
JSON.parse、Python的json模块)都是高度优化的实现,采用状态机或编译后的解析逻辑处理,速度非常快,完全不存在“相当缓慢”的问题。
BSON的核心差异
BSON是专门设计的二进制序列化格式,和JSON的核心区别在于:
- BSON会给每个字段附加一个类型标识字节,比如用
0x01表示双精度数,0x02表示字符串 - 反序列化时直接读取类型标识就能确定数据类型,不需要像JSON那样解析文本语法,在大数据量场景下性能更优,这也是MongoDB选择BSON作为存储格式的原因之一。
内容的提问来源于stack exchange,提问作者user12582392
相关产品推荐
相关产品推荐

