在Java中比较两个JSON文件的最佳方法

2022-09-01 04:21:04

你建议如何完成这项任务?

在我看来,挑战在于智能地呈现差异信息。在我重新发明轮子之前,是否有一种公认的方法来处理这种比较?


答案 1

我推荐 zjsonpatch 库,它根据 RFC 6902(JSON 补丁)提供差异信息。你可以把它和杰克逊一起使用:

JsonNode beforeNode = jacksonObjectMapper.readTree(beforeJsonString);
JsonNode afterNode = jacksonObjectMapper.readTree(afterJsonString);
JsonNode patch = JsonDiff.asJson(beforeNode, afterNode);
String diffs = patch.toString();

这个库比fge-json-patch(在另一个答案中提到过)更好,因为它可以检测从数组中插入/删除的项目。Fge-json-patch 无法处理这种情况(如果将一个项目插入到数组的中间,它会认为该项目以及之后的每个项目都已更改,因为它们都移动了一个)。


答案 2

比较 json 字符串的最简单方法是使用 JSONAssert 库。优点是,它不仅限于结构,如果您愿意,可以比较值:JSONCompare

JSONCompareResult result = 
     JSONCompare.compareJSON(json1, json2, JSONCompareMode.STRICT);
System.out.println(result.toString());

这将输出如下内容:

Expected: VALUE1
     got: VALUE2
 ; field1.field2