在java中删除JSON节点

时间:2017-05-26 09:06:05

标签: java json

我尝试删除任意JSON的所有节点,其值为'null'。

不知怎的,我在JsonPath上挣扎,因此我尝试使用以下代码迭代JSON:

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;
}

当我在我的JSON上运行它时,然后不会删除整个元素,因为括号保持不变。我也想知道,如果它可以工作,如果我在两个不同的地方有一个相同的密钥名称,但只想删除一个。

  

之前:{“interest”:[{“interestKey1”:“Dogs”},{“interestKey2”:“Cats”},{“interestKey3”:null}]}

     

之后:{“interest”:[{“interestKey1”:“Dogs”},{“interestKey2”:“Cats”},{}]}

我该如何处理?

2 个答案:

答案 0 :(得分:1)

您要从JsonObject中删除键值对,而不是包含JsonArray。而JsonObject本身可以有几个键值对。因此,删除一个不会删除整个对象。

jsonObj={"a":"cde","b":"fgh"}

这是一个有效的jsonObject。当我删除&#34; b&#34;从jsonObj.remove("b")开始,只有&#34; a&#34;仍为{"a":"cde"}并删除&#34; a&#34;返回{}

因此,如果要从jsonArray中删除整个jsonObject,请直接从jsonArray中删除它。

在JsonArray中,你不能用键选择一个jsonObject,而是用它的索引选择。因此,即使它有两个具有相同键的JsonObject,您也必须通过其唯一索引选择一个。

答案 1 :(得分:0)

尝试处理对象的基本情况。 下面的代码可能有帮助:

public static Map<String, Object> toMap(JSONObject object) throws 
JSONException {

    if(object==null)return null;   
    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);
    }
    if(null != value)
       map.put(key, value);
    if(null==value || value.toString().equalsIgnoreCase("NULL")) {
        object.remove(key);
    }
   }
 return map;
}