當我們在對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; }