代码之家  ›  专栏  ›  技术社区  ›  Akhilesh Kumar

如何有效地比较JSON中的更改并跟踪它

  •  0
  • Akhilesh Kumar  · 技术社区  · 7 年前

    {
      "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在其摘要周期中所做的那样)。

    2 回复  |  直到 7 年前
        1
  •  1
  •   binariedMe    7 年前

    我想是把你的物体放平。在每个更改状态下,只需将差异另存为 做。最后,要恢复到时间戳,只需按相反的顺序合并,就可以得到最终的对象。

    你应该做的是创建一个属性

    创建一些时间戳的原始对象,只是递归地合并。你可以用回忆录来进一步改进。

        2
  •  1
  •   TacheDeChoco    7 年前

    有很多js lib可以计算两个JSON有效负载之间的差异,通常是以补丁的形式,以后可以应用补丁

    • 或者在最新版本上以反向模式回到原来的版本。

    例如:

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