在Java中比较两个JSON文件的最佳方法
2022-09-01 04:21:04
你建议如何完成这项任务?
在我看来,挑战在于智能地呈现差异信息。在我重新发明轮子之前,是否有一种公认的方法来处理这种比较?
你建议如何完成这项任务?
在我看来,挑战在于智能地呈现差异信息。在我重新发明轮子之前,是否有一种公认的方法来处理这种比较?
我推荐 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 无法处理这种情况(如果将一个项目插入到数组的中间,它会认为该项目以及之后的每个项目都已更改,因为它们都移动了一个)。
比较 json 字符串的最简单方法是使用 JSONAssert 库。优点是,它不仅限于结构,如果您愿意,可以比较值:JSONCompare
JSONCompareResult result =
JSONCompare.compareJSON(json1, json2, JSONCompareMode.STRICT);
System.out.println(result.toString());
这将输出如下内容:
Expected: VALUE1
got: VALUE2
; field1.field2