文章目录加载中

EJSON 研究

它是 JSON 的扩展语法,和 BSON 类似,由 MongoDB 提出。

# 对比 JSON

本质上还是 JSON,只是支持更多的数据类型表示。

而这些数据类型,最终都会被转换为 JSON。

例如 EJSON 中Date类型代表日期,那么它会被转为:

date: { '$date': '2020-08-25T05:38:03.179Z' }

类似的还有 GEO(地理位置)、Point(图形)等高级数据类型。

# 对比 BSON

它的高级类型和 BSON 高级类型是通用的,开发时,均使用bson.js 这个库即可。

示例代码:

const BSON = require("bson");
const EJSON = BSON.EJSON;
console.log(
  EJSON.serialize({
    date: new Date(),
    hello: Long.fromNumber(100),
    test: new BSON.Double(
      1000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    ),
    int32: new BSON.Int32(123),
    arr: [1, 2],
    maxKey: new BSON.MaxKey(),
    objId: new BSON.ObjectId(`123456789011`),
    hello2: Long.fromNumber(
      1000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    ),
  })
);

输出:

{
  date: { '$date': '2020-08-25T05:38:03.179Z' },
  hello: 100,
  test: 1e+84,
  int32: 123,
  arr: [ 1, 2 ],
  maxKey: { '$maxKey': 1 },
  objId: { '$oid': '313233343536373839303131' },
  hello2: 9223372036854776000
}

# 优点

对比 JSON:

  • 支持更高级的数据类型
  • 高级类型会被转化为 JSON,兼容性好

对比 BSON:

  • 不是二进制,语义化更明显
  • 可以在任何平台交换数据,例如一些不支持二进制的浏览器

# 参考

本文来自心谭博客:xin-tan.com,经常更新web和算法的文章笔记,前往github查看目录归纳:github.com/dongyuanxin/blog