首页 > 解决方案 > 如何有效地比较 JSON 中的变化并跟踪它

问题描述

我有一个非常大的嵌套对象(stringify 为 4mb),如下所示,其深度可能为 15-20 级:

{
  "a": 5,
  "b": {
      "0": 1,
      "1": "x",
      "length": 2
   },
  "x": {
      "a": 1,
      "1": "z"
  },
  "c": {
      "0": 3,
      "1": "Am",
      "3": {
          "0": 3,
          "1": "x",
          "2": {
              "0": 3,
              "1": "Y",
              "length": 2
          },
          "length": 3
      },
      "length": 4
  }
}

在页面上的每个操作之后,对象的某些属性被更改,不知道上面的内容如下(参见 c["3"]["2"]):

{
  "a": 5,
  "b": {
      "0": 1,
      "1": "x",
      "length": 2
   },
  "x": {
      "a": 1,
      "1": "z"
  },
  "c": {
      "0": 3,
      "1": "Am",
      "3": {
          "0": 3,
          "1": "x",
          "2": {z:5,n:"y"},
          "length": 3
      },
      "length": 4
  }
}

我不能每次都存储整个对象,因为它会溢出内存。所以我只想跟踪变化。因此,当重播动作时,我只需更改对象的那一部分,它就会显示新对象。

注意:我不想以迭代方式比较对象,因为对象大小非常高,计算也会花费我很多。

我不知道如何开始。

我认为散列对象属性的某种方式应该会有所帮助(就像 angularJS 在其摘要周期中所做的那样)。

标签: javascriptjson

解决方案


您有大量的 js 库能够计算两个 JSON 有效负载之间的差异,通常以补丁的形式,以后可以应用

  • 在原始有效载荷上获取新版本
  • 或以反向模式在最新版本上返回原始版本。

例如:

https://json-delta.readthedocs.io/en/latest/philosophy.html https://github.com/benjamine/jsondiffpatch


推荐阅读