2017-05-26 373 views
0

我嘗試刪除任意JSON的所有節點,其值爲'null'。在java中刪除JSON節點

不知怎的,我與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,然後再不是整個元素被刪除,因爲支架留。我還想知道,如果它能起作用,如果我在兩個不同的地方有同樣的密鑰名稱,但只想刪除一個。

之前:{ 「利益」:[{ 「interestKey1」: 「狗」},{ 「interestKey2」: 「貓」},{ 「interestKey3」:空}]}

後:{ 「interest」:[{「interestKey1」:「Dogs」},{「interestKey2」:「Cats」},{}]}

我應該如何處理?

回答

0

您正在從JsonObject中刪除鍵值對,而不是封閉的JsonArray。而JsonObject本身可以有幾個鍵值對。因此,刪除一個不會刪除整個對象。

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

這是一個有效的jsonObject。當我從它刪除「B」之類jsonObj.remove("b"),只有「一」仍然{"a":"cde"},並刪去「或」收益{}

因此,如果你想從jsonArray刪除整個的JSONObject,直接從jsonArray刪除它。

而在JsonArray中,您不能使用鍵和索引來選擇jsonObject。因此,即使它有兩個具有相同鍵的JsonObjects,也必須通過其唯一索引來選擇一個。

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