當前項目遇到一個問題,就是深層嵌套的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); } } }