2017-02-09 73 views
1

移除null鍵我有以下JSON,我需要刪除所有具有空值如何從JSON對象

我已經試過這

import java.util.Iterator; 
import org.json.JSONException; 
import org.json.JSONObject; 
public class Remove { 
    public static void main(String[] args) throws JSONException { 
    String str = "{\r\n" + 
      "  \"videos\": {\r\n" + 
      " 
      "  }}"; 
     JSONObject json_obj = new JSONObject(str); 
     JSONObject allKeys_json= json_obj.getJSONObject("videos"); 
     Iterator<String> keys = allKeys_json.keys(); 
     while(keys.hasNext()) { 
     String keyanme = (String)keys.next(); 
     String keyvalue = allKeys_json.getString(keyanme); 
     if(keyvalue.contains("null")) 
     { 
      System.out.println(keyanme+"\t"+keyvalue); 
      json_obj.remove(keyanme); 
     } 
     } 
    System.out.println(allKeys_json); 
    } 
} 

但實際JSON是不受影響的鑰匙,你能告訴我如何做到這一點。

+0

你可以試試:'的JSONObject \t putOpt(字符串名稱,對象的值)' 等於穿上了(名稱,值),當兩個參數都非空;否則什麼也不做。 – malarres

+0

'org.json.JSONObject'是來自哪個API? – AxelH

回答

1

如果只有約操縱一個字符串,它的結構,你知道還有一個解決辦法是使用一些正則表達式

str.replaceAll(".*\": null(,)?\\r\\n", ""); 

這可能是更容易找到一個很好的正則表達式,而不是投入時間建立傑克遜可以使用的模型。

三題:

  • 上面的代碼並沒有弄清楚這是最後一行,並相應地調整JSON。

  • 該模式應該單獨編譯。

  • 與傑克遜相比,org.json效率很低。

0

首先,創建一個與JSON字符串對應的模型類。

添加

@JsonIgnoreProperties(ignoreUnknown = true) 

你的模型類,如

@JsonIgnoreProperties(ignoreUnknown = true) 
public class Video { 
    //the properties 
} 

http://www.baeldung.com/jackson-deserialize-json-unknown-properties

+0

https://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations –

1

檢查空值,這樣

if(keyvalue == null) 

這fixex問題

0

使用Jackson API並在要刪除的模型/ DTO類上使用@JsonInclude(Include.NON_NULL)。

@JsonInclude(Include.NON_NULL) 
@JsonIgnoreProperties(ignoreUnknown=true) 
public class Video { 
    //the properties 
} 
+0

_使用Jackson API_重定向到不同的API有點極端(如果我沒有弄錯,這看起來不像傑克遜)只是爲了刪除空值;-) – AxelH