关于Java:如何使用GSON比较两个JSON字符串是否相等?

 2021-02-24 

How to compare two JSON Strings for equality using GSON?

我正在尝试比较两个JSON字符串是否相等。我找到了使用杰克逊的解决方案,如下所示,但是在我的所有项目中,我都使用GSON,所以我需要使用GSON做同样的事情。

1
2
3
4
5
6
7
8
ObjectMapper mapper = new ObjectMapper();
JsonNode tree1 = mapper.readTree(jsonString1);
JsonNode tree2 = mapper.readTree(jsonString2);
if (tree1.equals(tree2)) {
  // yes, contents are equal -- note, ordering of arrays matters, objects not
} else {
  // not equal
}

是否可以使用GSON比较两个JSON字符串是否相等?


根据此答案,您可以使用此:

1
2
3
4
JsonParser parser = new JsonParser();
JsonElement o1 = parser.parse("{a : {a : 2}, b : 2}");
JsonElement o2 = parser.parse("{b : 2, a : {a : 2}}");
assertEquals(o1, o2);

不幸的是,我想这还不如您希望的那么干净,但是它应该可以工作。

无论如何,翻阅该线程中的其他答案可能会有所帮助(尽管并非所有人都使用GSON),因此,如果无法解决问题,也许是其中一种。


我不相信Gson库做出任何声明,即两个相等的JSON元素的JSON输出将是相同的,这主要是由于对象中属性的顺序,因为该标准不需要任何顺序。 Gson库本身不提供比较JSON元素或其序列化表示的功能。可以编写一个将两个JSON元素进行比较并适当地归入基础复合结构(即数组和对象)的函数。

我在这里找到了似乎包含有效比较功能的文章。