2017-02-09 12 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は影響を受けません試してみました

null値を持つすべてのキーを削除する必要があり、どうすればいいか教えてください。

+0

あなたは試みることができる: 'JSONObject \t putOpt(文字列名、オブジェクト値)' 等価の両方のパラメータがnullのとき(名前、値)を置きます。それ以外は何もしません。 – malarres

+0

'org.json.JSONObject'はどのAPIからですか? – AxelH

答えて

1

同様

それだけであなたが解決策は、いくつかの正規表現

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

を使用することですよく知っている構造の文字列を操作することだ場合、より良い正規表現を見つけることが容易になる可能性ジャクソンが使用できるモデルの構築に時間を費やす。

三ノート:

  • 上記のコードの最後の行である把握し、それに応じてJSONを適応しません。

  • パターンは別々にコンパイルする必要があります。

  • org.jsonはJacksonと比較して非常に非効率的です。

1

は、この問題をfixexこの

if(keyvalue == null) 

のようなあなたのnull値をチェックし、あなたのモデルクラスに

@JsonIgnoreProperties(ignoreUnknown = true) 

を追加

0

Jackson APIを使用し、削除するモデル/ DTOクラスで@JsonInclude(Include.NON_NULL)を使用します。

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

_ Jackson APIを使用すると、別のAPIにリダイレクトされます(私が間違っていない場合、これはJacksonのようには見えません) Null値を削除するだけです;-) – AxelH

関連する問題