解決JSONNull導致的JSONObject序列化問題

當前項目遇到一個問題,就是深層嵌套的json(cn.hutool.json.JSONObject)結構如果當中有某個key的值是null,序列化時就會報JSONNull錯誤,在網上搜了一下,並沒有找到解決方法。思考了一下,可以將value值是null的元素替換成"",由於是深層遞歸,採用遞歸方法,話不多說,直接上代碼

private void removeNull(JSONObject object) {
    object.keySet().forEach(key->{
        Object o = object.get(key);
        if(o instanceof JSONArray) {
            object.getJSONArray(key).forEach(o1 -> {
                if(o1 instanceof JSONObject) {
                    removeNull((JSONObject) o1);
                }
            });
        }
        if(o instanceof JSONObject) {
            removeNull(object.getJSONObject(key));
        }
        if(o instanceof JSONNull) {
            object.put(key,"");
        }
    });
}

 

/********************************************2010-3-24**************************/

上面的方法有一種情況會報錯,就是{"key":[null]},所以更新代碼

private void removeNull(JSONObject object) {
    object.keySet().forEach(key->{
        Object o = object.get(key);
        if (o instanceof JSONArray) {
            removeNull((JSONArray) o);
        }
        if (o instanceof JSONObject) {
            removeNull(object.getJSONObject(key));
        }
        if (o instanceof JSONNull) {
            object.put(key, "");
        }
    });
}
private void removeNull(JSONArray array) {
    for (int i = 0; i < array.size(); i++) {
        Object o1 = array.get(i);
        if (o1 instanceof JSONObject) {
            removeNull((JSONObject) o1);
        }
        if(o1 instanceof JSONArray) {
            removeNull((JSONArray) o1);
        }
        if(o1 instanceof JSONNull) {
            array.remove(i);
        }
    }
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章