比较两个json是否相等,忽略数组内元素顺序

来源:互联网 发布:软件成熟度模型二手 编辑:程序博客网 时间:2024/05/16 05:54

借助com.google.gson包比较2个json是否相等,忽略json数组的顺序

    /**
     * 比较两个JsonElement是否相等,json数组顺序不影响
     * @param jsonElementX
     * @param jsonElementY
     * @return
     */
    public static boolean isJsonElementEquals(JsonElement jsonElementX, JsonElement jsonElementY){


        if(jsonElementX.isJsonObject() && jsonElementY.isJsonObject()){
            JsonObject jsonObjectX = (JsonObject)jsonElementX;
            JsonObject jsonObjectY = (JsonObject)jsonElementY;
            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:jsonObjectX.entrySet()) {
                    if (jsonElementEntryX.getKey().equals(jsonElementEntryY.getKey())) {
                        if(isJsonElementEquals(jsonElementEntryX.getValue(),jsonElementEntryY.getValue())){
                            flag = true;
                            break;
                        }
                    }
                }
                if (!flag) {
                    return false;
                }
            }
        }
        else if(jsonElementX.isJsonArray() && jsonElementY.isJsonArray()){
            JsonArray jsonArrayX = (JsonArray)jsonElementX;
            JsonArray jsonArrayY = (JsonArray)jsonElementY;
            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(isJsonElementEquals(jsonArrayX.get(i),jsonArrayY.get(j))){
                        flag = true;
                        break;
                    }
                }
                if (!flag) {
                    return false;
                }
            }
        }
        else if(jsonElementX.isJsonPrimitive() && jsonElementY.isJsonPrimitive()){
            if(((JsonPrimitive)jsonElementX).equals((JsonPrimitive)jsonElementY)){
                return true;
            }
        }else if(jsonElementX.isJsonNull() && jsonElementY.isJsonNull()){
            return true;
        }else{
            return false;
        }
        return true;
    }
0 0