2014-09-04 113 views
4

我想比較兩個JSON字符串的平等。我發現這個使用Jackson的solution如下所示,但是在我使用GSON的所有項目中,我需要使用GSON來做同樣的事情。如何使用GSON比較兩個JSON字符串是否相等?

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 
} 

有什麼辦法可以比較兩個JSON字符串是否相等使用GSON?

+0

從理論上講,您只需反序列化地圖/列表並比較兩個根。 – 2014-09-04 00:06:57

回答

5

根據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)可能會有所幫助,所以如果這樣做不起作用,那可能就是其中之一。

+4

嗨 - 用最新的GSON 2.4試過這個,但是這沒有奏效。確認這返回false:new JsonParser()。parse(「{a:{a:2},b:2}」)。equals(new JsonParser()。parse(「{b:2,a:{a:2 }}「)) – 2015-11-19 02:29:22