当我们在对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; }
转载于:https://blog.51cto.com/113754/2123073