当我们在对JSON对象进行比较时,如果JSON串中内容相同,但顺序不同时,直接比较就会出错,以下方法可解决这一问题。
/**
* 对两个json对象进行比较,顺序无关
* @param jsonx
* @param jsony
* @return
*/
public boolean compareJson(JsonElement jsonx, JsonElement jsony){
if(jsonx.isJsonObject() && jsony.isJsonObject()){
JsonObject jsonObjectX = (JsonObject) jsonx;
JsonObject jsonObjectY = (JsonObject) jsony;
if(jsonObjectX.entrySet().size() != jsonObjectY.entrySet().size()) return false;
for(Map.Entry<String, JsonElement> jsonElementEntryX:jsonObjectX.entrySet()){
boolean flag = false;
for(Map.Entry<String, JsonElement> jsonElementEntryY : jsonObjectY.entrySet()){
if(jsonElementEntryX.getKey().equals(jsonElementEntryY.getKey())){
if(compareJson(jsonElementEntryX.getValue(), jsonElementEntryY.getValue())){
flag = true;
break;
}
}
}
if(!flag){
return false;
}
}
}
else if(jsonx.isJsonArray() && jsony.isJsonArray()){
JsonArray jsonArrayX = (JsonArray) jsonx;
JsonArray jsonArrayY = (JsonArray) jsony;
if(jsonArrayX.size() != jsonArrayY.size()) return false;
for(int i =0;i<jsonArrayX.size();i++){
boolean flag = false;
for(int j=0;j<jsonArrayY.size();j++){
if(compareJson(jsonArrayX.get(i), jsonArrayY.get(j))){
flag = true;
break;
}
}
if(!flag){
return false;
}
}
}
else if(jsonx.isJsonPrimitive() && jsony.isJsonPrimitive()){
if(((JsonPrimitive)jsonx).equals((JsonPrimitive)jsony)){
return true;
}else{
return false;
}
}
else if(jsonx.isJsonNull() && jsony.isJsonNull()){
return true;
}else{
return false;
}
return true;
}