2016-03-25 5 views
2

responseフィールドにnull値が設定されているかどうかを確認する必要があるJSON応答がありません。 responseフィールドにnull値がある場合は、プログラムから抜け出す必要があります。JSONのフィールドでnullをチェックする方法は?

[ 
    { 
     "results": { 
      "response": null, 
      "type": "ABC" 
     }, 
     "error": null 
    } 
] 

これを確認する最も簡単な方法は何ですか?私が知っている1つのオプションは、JSONをPOJOに変換してレスポンスフィールドをチェックすることです。他の方法はありますか?

+1

は、あなたが適用しようとするかもしれません正規表現。http://www.rexegg.com/regex-quickstart.html – kosa

答えて

4

は、あなたがこのような何かを行うことができ、それが文字列である場合

JsonObject jsonObject = new JsonParser().parse(st).getAsJsonObject(); 
JsonElement el = jsonObject.get("error"); 
if (el != null && !el.isJsonNull()){ 
     System.out.println (" not null");   
}else{ 
     System.out.println (" is null"); 
} 
0

レスキューフィールドの値を取得する正規表現/解析文字列、またはgoogle gsonのlib:https://github.com/google/gsonを使用してオブジェクトを作成し、任意のフィールドにアクセスします。

0

(あなたが示唆したように)確実にnullをレスポンスフィールドの値をチェックするための最も安全な方法は、POJOクラスでJSONデータ構造をモデル化し、あなたのPOJOにあなたのJSONをデシリアライズするために、このようなGsonJacksonとしてJSONライブラリを使用するには。

regexの使用をアドバイスする他の回答をここで聞いてはいけません。正規表現のみを使用して正しい信頼性の高いjsonパーサを構築するには、a)バグが発生しやすく、b)パフォーマンスが低下する可能性があります。

0

、ニーズに応じて、2つの方法:

迅速かつ実際に便利/十分良い/良いパフォーマンスかもしれない汚い方法

String jsonString = ... 
jsonString.contains("\"response\": null"); 

は、サーバー場合は、[はい、それはエラーが発生しやすいです何かを変更したり、改行などを行うこともありますが、リソースを大幅に節約することができます。

より高い許容誤差を持つバリエーションには、フィールド名と値の間に0個または複数の空白を入れるだけのregexpが含まれます。別の変形例が、フィールドのインデックスを検索し、その後に手動で値を探すことです:

int fieldIndex = jsonString.indexOf("\"response\":"); 
//left as an exercise... 

などGson(GoogleのJSONライブラリ)としてライブラリ、とJSONの解析:

シンプルな最低限の結果クラス:

public static class Result { 
    public static class Results { 
     public String response; 
    } 
    public Results results; 
} 

解析し、検査(アレイのヌルおよび長さのチェックを無視する):

Gson gson = new Gson(); 
Result[] results = gson.fromJson(jsonString, Result[].class); 
System.out.println(results[0].results.response); 

Gsonは、ここで見つけることができます: https://github.com/google/gson

1

私はorg.json.JSONObjectを使用しています。これは、JSONObjectがnullかどうかをテストするために使用できる例です。

パッケージgeneral; Googleのgsonを使用して

JSONObject jsonObj = new JSONObject(jsonString);   
    System.out.println(jsonObj .isNull("error") ? " error is null ":" error is not null"); 

場合:あなたはcodehouseのJSONライブラリを使用している場合は

import java.util.ArrayList; 
import java.util.List; 

import org.json.JSONArray; 
import org.json.JSONObject; 

public class CheckNullInJSONObject { 

    public static void main(String[] args) { 
     JSONObject json = new JSONObject("{results : [{response:null}, {type:ABC}], error:null}"); 
     JSONArray array = json.getJSONArray("results"); 
     try { 
      for(int i = 0 ; i < array.length() ; i++){ 
      JSONObject response = array.getJSONObject(i); 
      if (response.isNull("response")){ 
       throw new Exception("Null value found"); 
      } 
      } 
     }catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
関連する問題