9

我有两个 json 文件,我想得到一个包含差异的 json。重要的是只显示内容的实际差异,而不管更改某些元素的顺序。

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

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

4

3 回答 3

9

尝试使用array_diff函数

array_diff(json_decode($jsonData1), json_decode($jsonData2));
于 2013-03-23T19:08:38.023 回答
6

基本上,您想要的是类似于 的东西array_diff_assoc,但适用于 json 对象,并且是递归的。

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

假设您希望计算对象 A 和 B 之间的差异,并将结果保存在对象 C 中。原理是遍历 A 的每个字段(aforeach应该这样做),并且何时:

  • B中不存在这样的字段,将其复制到C上。
  • B中存在类似的字段,将A字段与B字段的差异结果放入C中,这是对diff函数的递归调用,以这些字段为参数,以及结果的新对象。

应该尊重 A 的顺序。

于 2013-03-23T19:26:22.817 回答
2

对于此任务,您可以尝试使用https://github.com/swagest/json-diff

它将进行键值递归比较(键的顺序无关紧要)并生成JSON 补丁(在 IETF 的RFC 6902中指定)。

于 2018-02-06T03:00:07.900 回答