当我们在对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;
		}