98

json 値が null であることを検出するにはどうすればよいですか? 例: [{"username":null},{"username":"null"}]

最初のケースは存在しないユーザー名を表し、2 番目のケースは「null」という名前のユーザーを表します。ただし、それらを取得しようとすると、両方の値が文字列「null」になります

JSONObject json = new JSONObject("{\"hello\":null}");
json.put("bye", JSONObject.NULL);
Log.e("LOG", json.toString());
Log.e("LOG", "hello="+json.getString("hello") + " is null? "
                + (json.getString("hello") == null));
Log.e("LOG", "bye="+json.getString("bye") + " is null? "
                + (json.getString("bye") == null));

ログ出力は

{"hello":"null","bye":null}
hello=null is null? false
bye=null is null? false
4

6 に答える 6

225

で試してくださいjson.isNull( "field-name" )

参照: http://developer.android.com/reference/org/json/JSONObject.html#isNull%28java.lang.String%29

于 2012-05-14T18:15:53.820 に答える
19

指定されたキーが存在する場合、JSONObject#getString は値を返すため、定義上は null ではありません。JSONObject.NULL が存在する理由は、null の JSON 値を表すためです。

json.getString("hello").equals(JSONObject.NULL); // should be false
json.getString("bye").equals(JSONObject.NULL); // should be true
于 2012-05-14T18:16:38.907 に答える
16

Android の場合、そのようなマッピングが存在しない場合は JSONException が発生します。したがって、このメソッドを直接呼び出すことはできません。

json.getString("bye")

データが空になる可能性がある場合(キーが存在しない可能性があります)、試してください

json.optString("bye","callback string");

また

json.optString("bye");

代わりは。

デモ コードでは、

JSONObject json = new JSONObject("{\"hello\":null}");
json.getString("hello");

これは、文字列「null」not null です。

使用する必要があります

if(json.isNull("hello")) {
    helloStr = null;
} else {
    helloStr = json.getString("hello");
}
于 2013-03-11T08:36:02.657 に答える
4

最初にisNull()....で確認してください。うまくいかない場合は、以下を試してください

また、JSONObject.NULLnull値を確認する必要があります...

 if ((resultObject.has("username")
    && null != resultObject.getString("username")
    && resultObject.getString("username").trim().length() != 0)
      {
               //not null
        }

そしてあなたの場合もチェックしてくださいresultObject.getString("username").trim().eqauls("null")

于 2012-05-14T18:16:09.913 に答える
3

最初にjsonを解析し、後でオブジェクトを処理する必要がある場合は、これを試してください

パーサー

Object data = json.get("username");

ハンドラ

if (data instanceof Integer || data instanceof Double || data instanceof Long) {
     // handle number ;
} else if (data instanceof String) {
     // hanle string;               
} else if (data == JSONObject.NULL) {
     // hanle null;                 
}
于 2013-03-07T10:10:53.417 に答える
2

以下は、1 行のコードだけで JSON 文字列を取得できるようにするために使用するヘルパー メソッドです。

public String getJsonString(JSONObject jso, String field) {
    if(jso.isNull(field))
        return null;
    else
        try {
            return jso.getString(field);
        }
        catch(Exception ex) {
            LogHelper.e("model", "Error parsing value");
            return null;
        }
}

そして、次のようなもの:

String mFirstName = getJsonString(jsonObject, "first_name");

文字列値を与えるか、文字列変数を安全にnullに設定します。このような落とし穴を避けるために、できる限り Gson を使用しています。私の意見では、null 値をより適切に処理できます。

于 2015-07-30T00:46:54.197 に答える