Ich versuche alle Knoten eines beliebigen JSON zu löschen, die den Wert 'null' haben.JSON-Knoten in Java entfernen
Irgendwie habe ich mit JsonPath kämpfte deshalb habe ich versucht, mit dem folgenden Code durch die JSON iterieren:
public static Map<String, Object> toMap(JSONObject object) throws JSONException {
Map<String, Object> map = new HashMap<String, Object>();
Iterator<String> keysItr = object.keys();
while(keysItr.hasNext()) {
String key = keysItr.next();
Object value = object.get(key);
if(value instanceof JSONArray) {
value = toList((JSONArray) value);
}
else if(value instanceof JSONObject) {
value = toMap((JSONObject) value);
}
map.put(key, value);
if(value.toString().equalsIgnoreCase("NULL")) {
object.remove(key);
}
}
return map;
}
public static List<Object> toList(JSONArray array) throws JSONException {
List<Object> list = new ArrayList<Object>();
for(int i = 0; i < array.length(); i++) {
Object value = array.get(i);
if(value instanceof JSONArray) {
value = toList((JSONArray) value);
}
else if(value instanceof JSONObject) {
value = toMap((JSONObject) value);
}
list.add(value);
}
return list;
}
Wenn ich es über meine JSON laufen, dann wird der nicht das gesamte Element gelöscht wird, wie die Klammern bleibe. Auch ich frage mich, ob es funktionieren würde, wenn ich an zwei verschiedenen Stellen den gleichen Namen eines Schlüssels habe, aber nur einen entfernen möchte.
vor: { "Interesse": [{ "interestKey1": "Dogs"}, { "interestKey2": "Cats"}, { "interestKey3": null}]}
nach: { "Interessen": [{"interseKey1": "Hunde"}, {"interseKey2": "Katzen"}, {}]}
Wie soll ich das angehen?