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

8

我正在尝试比较两个JSON字符串是否相等。我找到了这个解决方案,它使用了Jackson如下所示,但在我的所有项目中,我都使用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字符串是否相等?

理论上,您只需将其反序列化为Maps/Lists并比较两个根即可。 - Hot Licks
2个回答

10

根据这个答案,您可以使用以下代码:

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),因此如果这不能解决问题,也许其中之一可以。


4
你好 - 我使用最新的GSON 2.4尝试了这个,但它没有起作用。确认返回false:new JsonParser().parse("{a : {a : 2}, b : 2}").equals(new JsonParser().parse("{b : 2, a : {a : 2}}")) - Will Glass

0

我不相信Gson库会对两个相等的JSON元素的输出做出任何声明,主要是因为对象中属性的顺序不同,因为标准不要求任何顺序。Gson库本身并没有提供比较JSON元素或其序列化表示的功能。可以编写一个函数来比较两个JSON元素,并正确地进入底层复合结构(即数组和对象)。

我找到了这篇文章,似乎包含一个可用的比较函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接