json vs bson
·
1 min read
最近在做服务对接时,对方服务提供的数据格式为BSON序列化后的二进制数据,之前只知有JSON,不知有BSON。这里便总结下。
BSON
- BSON即二进制版JSON数据,JSON序列化对象编程字符串,而BSON序列化后变成二进制
- BSON针对数据格式支持会更丰富些,比如Date/Binary
- js下bson处理相关类库为js-bson,该库浏览器/Node均支持
举例
// 序列化后为string
JSON.stringify({a: [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]})
// 序列化后为buffer-二进制数据类型
BSON.serialize({a: [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]})
BSON vs JSON
如上通过序列化JSON可以看到除了本身数据,携带的元数据信息少,因此空间利用率高,但BSON携带元数据信息多,因此会发现同样的对象在序列化后BSON空间占用会更多些。但并不绝对,特定场景下,BSON会比JSON占用空间小。比如下面这样
let now = new Date(); let data1 = JSON.stringify({a: now}); let data2 = BSON.serialize({a: now}); console.log(Buffer.from(data1).byteLength); console.log(data2.byteLength);
JSON序列化后为字符串,更易读,如果是二进制,不经过反序列化就无法理解其中内容。
BSON携带元数据,算是空间换时间,因此在遍历查询/修改上速度会相对较快些。