我在使用Guava的Maps.difference
时遇到问题
现在,使用以下代码比较来自两个不同json的两个HashMap:
//Create maps from the given jsons
Gson gson = new Gson();
Type type = new TypeToken<Map<String, Object>>(){}.getType();
Map<String, Object> map1 = gson.fromJson(jsonObject1, type);
Map<String, Object> map2 = gson.fromJson(jsonObject2, type);
//Flatten the maps
Map<String, Object> leftFlatMap = FlatMap.flatten(map1);
Map<String, Object> rightFlatMap = FlatMap.flatten(map2);
//Check differences between both maps
MapDifference<String, Object> difference = Maps.difference(leftFlatMap, rightFlatMap);
一切都运行良好,并且(几乎)正确地比较了所有元素。问题是当HashMap中的一个元素是Map数组时,元素是相同的,但顺序不同。如下所示:
第一个JSON:
{ "body":[
{
"primitive":"VALUE",
"jsonArray":[
{
"element":83284180
},
{
"anotherElement":20832841804
}
]
}
]
}
第二个JSON:
{
"body":[
{
"primitive":"VALUE",
"jsonArray":[
{
"anotherElement":20832841804
},
{
"element":83284180
}
]
}
]
}
正如您所看到的,element和anotherElement的值是相同的,但由于它们在数组中的出现顺序不同,因此差异显示了错误。
有没有可能对数组排序?或者有没有其他的解决方案?
提前感谢!!
1条答案
按热度按时间hfwmuf9z1#
假设
jsonObject1
和jsonObject2
是JsonElement
实现,则可以对其后代进行排序。第一个
如有必要,还可以考虑对后代进行递归排序。
请注意,您 * 可能 * 也有给定JSON文档的Map,但我认为这不是您的情况,但如果是,您可能希望应用
@JsonAdapter
来应用特殊的排序反序列化器(但我仍然认为这不是一个好主意)。或者,也可以为给定的JsonObject
创建一个Map视图,以便它可以生成递归的重新排序视图。