json vs bson

最近在做服务对接时,对方服务提供的数据格式为BSON序列化后的二进制数据,之前只知有JSON,不知有BSON。这里便总结下。

https://static.1991421.cn/2022/2022-09-25-123303.jpeg

BSON

  1. BSON即二进制版JSON数据,JSON序列化对象编程字符串,而BSON序列化后变成二进制
  2. BSON针对数据格式支持会更丰富些,比如Date/Binary
  3. js下bson处理相关类库为js-bson,该库浏览器/Node均支持

举例

1
2
3
4
5
6
7
// 序列化后为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

  1. 如上通过序列化JSON可以看到除了本身数据,携带的元数据信息少,因此空间利用率高,但BSON携带元数据信息多,因此会发现同样的对象在序列化后BSON空间占用会更多些。但并不绝对,特定场景下,BSON会比JSON占用空间小。比如下面这样

    1
    2
    3
    4
    5
    6
    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);
  2. JSON序列化后为字符串,更易读,如果是二进制,不经过反序列化就无法理解其中内容。

  3. BSON携带元数据,算是空间换时间,因此在遍历查询/修改上速度会相对较快些。

参考文档