我试图比较两个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字符串是否相等?
答案 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。