Php 以编程方式返回两个json文件差异的最佳方法

Php 以编程方式返回两个json文件差异的最佳方法,php,json,performance,algorithm,comparison,Php,Json,Performance,Algorithm,Comparison,我有两个json文件,我想得到一个包含差异的json重要的是无论某些元素的顺序如何变化,都应仅显示内容的实际差异 最好的方法是什么?我正在寻找一个尽可能高效的解决方案,因为jsons可能包含大量数据,用户需要尽快完成工作 注意:jsons可能包含不同深度编码的数据。任何编程语言都可以,但我更喜欢用php轻松实现的答案。尝试使用函数 基本上,您想要的是类似于array\u diff\u assoc,但适用于json对象和递归对象 由于引用问题,array_diff函数不是递归函数:可以将数组的引用

我有两个json文件,我想得到一个包含差异的json重要的是无论某些元素的顺序如何变化,都应仅显示内容的实际差异

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

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

尝试使用函数


基本上,您想要的是类似于
array\u diff\u assoc
,但适用于json对象和递归对象

由于引用问题,
array_diff
函数不是递归函数:可以将数组的引用分配给该数组的条目,从而使数组无限递归。我认为不可能在json对象中获得相同的情况,从而使递归函数安全

假设您希望计算对象A和B之间的差值,并将结果放入对象C中。 其原理是在A的每个字段上循环(A
foreach
应该执行),并且在以下情况下:

  • B中不存在此类字段,请将其复制到C上
  • B中存在一个类似的字段,将a字段与B字段的差异结果放在C中,这是以这些字段为参数对diff函数的递归调用,也是结果的新对象

应遵守的顺序。

对于此任务,您可以尝试使用


它将进行键式递归比较(键的顺序无关紧要)并生成(在IETF中指定)。

无论您如何看待它,我相信您只需要检查每个键。除非您可以依赖某种标识符,否则您需要详细说明。我在这里回答了一个类似的问题:“[多维数组,检查差异][1]”。如果有必要,可以通过递归调用“get_keys”和“compare_records”方法修改答案,使其下降到分支中。[1] :@J.D.Pace抱歉,没有看到它“不管更改某些元素的顺序”-我假设您正在谈论对象。在列表中,顺序很重要。@KarolyHorvath它们是通过图形api从facebook收集的对象。我可以很容易地对它们进行排序,这不再是一个问题,但是如果处理大量数据,排序可能会花费很多时间。我应该对
json
s?@BujancaMihai排序吗,请注意,该算法不会考虑只出现在B@Alexander这就是集合差分的原理:A-B意味着你希望A的元素不在B中。那些出现在B中而不在A中的元素是不相关的。@didierc,编辑一下问题的标题就合适了
array_diff(json_decode($jsonData1), json_decode($jsonData2));