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

时间:2014-09-04 00:04:27

标签: java json gson equality

我试图比较两个JSON字符串的相等性。我发现这个使用Jackson的solution如下所示,但在我的所有项目中,我使用的是GSON,所以我需要使用GSON做同样的事情。

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字符串是否相等?

2 个答案:

答案 0 :(得分:6)

根据this answer你可以使用:

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),所以如果不能解决这个问题,可能其中一个可能。

答案 1 :(得分:0)

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

我能够找到似乎包含有效的比较功能的this article here