我有两个json文件,我想得到一个包含差异的json。 重要即只有内容的实际差异应显示,无论改变某些元素的顺序。以编程方式返回两个json文件差异的最佳方式
什么是最好的方法来做到这一点?我正在寻找尽可能高效的解决方案,因为json
可能包含大量数据,用户需要尽快完成工作。
注意:json
s可能包含在不同深度编码的数据。任何编程语言都可以,但我更喜欢一个可以在PHP中轻松实现的答案。
我有两个json文件,我想得到一个包含差异的json。 重要即只有内容的实际差异应显示,无论改变某些元素的顺序。以编程方式返回两个json文件差异的最佳方式
什么是最好的方法来做到这一点?我正在寻找尽可能高效的解决方案,因为json
可能包含大量数据,用户需要尽快完成工作。
注意:json
s可能包含在不同深度编码的数据。任何编程语言都可以,但我更喜欢一个可以在PHP中轻松实现的答案。
基本上,你想要的是类似array_diff_assoc
的东西,但适用于JSON对象和递归。
由于参考问题,array_diff
函数不是递归的:可以将数组的引用赋值给该数组的条目,从而使数组无限递归。我不认为有可能得到与json对象相同的情况,从而使递归函数安全。
让我们假设你想计算物体A和B之间的差异,有结果的对象C. 的原理是遍历的每个字段(foreach
应该做的),而当:
应该遵守A的顺序。
我应该对“json”进行排序吗? – 2013-03-23 19:30:54
这没有必要。 – 2013-03-23 19:35:51
@BujancaMihai,注意这个算法不会考虑只出现在B – Alexander 2013-03-23 20:29:50
尝试使用array_diff功能
array_diff(json_decode($jsonData1), json_decode($jsonData2));
对于这个任务,你可以用https://github.com/swaggest/json-diff
尝试将重点做明智的递归比较(键无关紧要的顺序),并产生JSON Patch(由IETF在RFC 6902指定)。
无论你如何看待它,我相信你只需要通过每一个关键。除非你可以依靠某种标识符,但对于这样的事情,你需要详细说明更多 – Alexander 2013-03-23 19:12:20
我在这里回答了一个类似的问题:“[多维数组,检查差异] [1]”。如果需要,可以通过递归调用“get_keys”和“compare_records”方法将答案修改为分支。 [1]:http://stackoverflow.com/questions/15504734/multidimensional-arrays-check-difference/15504984#15504984 – 2013-03-23 19:21:48
@JDPace对不起,没看出来 – 2013-03-23 19:24:59