javascript - 如何有效地比较 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 在其摘要周期中所做的那样)。
解决方案
您有大量的 js 库能够计算两个 JSON 有效负载之间的差异,通常以补丁的形式,以后可以应用
- 在原始有效载荷上获取新版本
- 或以反向模式在最新版本上返回原始版本。
例如:
https://json-delta.readthedocs.io/en/latest/philosophy.html https://github.com/benjamine/jsondiffpatch
推荐阅读
- .net - 检查 autofac 中间件中的构造函数参数
- git - GIT:损坏的文件不允许我签出其他分支
- sql - Postgres:将文本 [] 列转换为不同的字符
- google-apps-script - 如何将 PDF 文件从 Google Drive 附加到附件阵列?
- openedge - 执行 .p 文件后,未使用 proenv 在 test.out 文件中获取输出
- azure-cognitive-search - 认知搜索刻面存储需求
- r - 打印回归树时出现问题,“cat(x, ..., sep = sep) 中的错误:参数 1(类型 'list')不能由 'cat' 处理”
- r - 从多列中选择组中的值
- javascript - 将对象转换为类实例
- icloud - iCloud GameKit 40 请求/秒限问题