2013-03-23 32 views
6

我有两个json文件,我想得到一个包含差异的json。 重要只有内容的实际差异应显示,无论改变某些元素的顺序。以编程方式返回两个json文件差异的最佳方式

什么是最好的方法来做到这一点?我正在寻找尽可能高效的解决方案,因为json可能包含大量数据,用户需要尽快完成工作。

注意:json s可能包含在不同深度编码的数据。任何编程语言都可以,但我更喜欢一个可以在PHP中轻松实现的答案。

+0

无论你如何看待它,我相信你只需要通过每一个关键。除非你可以依靠某种标识符,但对于这样的事情,你需要详细说明更多 – Alexander 2013-03-23 19:12:20

+1

我在这里回答了一个类似的问题:“[多维数组,检查差异] [1]”。如果需要,可以通过递归调用“get_keys”和“compare_records”方法将答案修改为分支。 [1]:http://stackoverflow.com/questions/15504734/multidimensional-arrays-check-difference/15504984#15504984 – 2013-03-23 19:21:48

+0

@JDPace对不起,没看出来 – 2013-03-23 19:24:59

回答

4

基本上,你想要的是类似array_diff_assoc的东西,但适用于JSON对象和递归。

由于参考问题,array_diff函数不是递归的:可以将数组的引用赋值给该数组的条目,从而使数组无限递归。我不认为有可能得到与json对象相同的情况,从而使递归函数安全。

让我们假设你想计算物体A和B之间的差异,有结果的对象C. 的原理是遍历的每个字段(foreach应该做的),而当:

  • 没有这样的字段存在于B,将其复制在C.在乙
  • 类似字段存在,放于C A场与B字段的差异,这是对DIFF函数递归调用的结果以这些字段作为参数,以及结果的新对象。

应该遵守A的顺序。

+0

我应该对“json”进行排序吗? – 2013-03-23 19:30:54

+2

这没有必要。 – 2013-03-23 19:35:51

+1

@BujancaMihai,注意这个算法不会考虑只出现在B – Alexander 2013-03-23 20:29:50

7

尝试使用array_diff功能

array_diff(json_decode($jsonData1), json_decode($jsonData2));