json vs bson
最近在做服务对接时,对方服务提供的数据格式为BSON序列化后的二进制数据,之前只知有JSON,不知有BSON。这里便总结下。
BSON
- BSON即二进制版JSON数据,JSON序列化对象编程字符串,而BSON序列化后变成二进制
- BSON针对数据格式支持会更丰富些,比如Date/Binary
- js下bson处理相关类库为js-bson,该库浏览器/Node均支持
举例
1 | // 序列化后为string |
BSON vs JSON
如上通过序列化JSON可以看到除了本身数据,携带的元数据信息少,因此空间利用率高,但BSON携带元数据信息多,因此会发现同样的对象在序列化后BSON空间占用会更多些。但并不绝对,特定场景下,BSON会比JSON占用空间小。比如下面这样
1
2
3
4
5
6let 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携带元数据,算是空间换时间,因此在遍历查询/修改上速度会相对较快些。