Frage Android JSON- und NULL-Werte


Wie kann ich erkennen, wenn ein JSON-Wert Null ist? beispielsweise: [{"Benutzername": null}, {"Benutzername": "null"}]

Der erste Fall repräsentiert einen nicht existierenden Benutzernamen und der zweite einen Benutzer namens "null". Aber wenn Sie versuchen, sie zu erhalten, ergeben beide Werte die Zeichenfolge "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));

Die Protokollausgabe ist

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

75
2018-05-14 18:12


Ursprung


Antworten:


Versuche es mit json.isNull( "field-name" ).

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


194
2018-05-14 18:15



Da JSONObject # getString einen Wert zurückgibt, wenn der angegebene Schlüssel existiert, ist er definitionsgemäß nicht null. Dies ist der Grund, warum JSONObject.NULL existiert: um einen JSON-Nullwert darzustellen.

json.getString("hello").equals(JSONObject.NULL); // should be false
json.getString("bye").equals(JSONObject.NULL); // should be true

13
2018-05-14 18:16



Für Android wird eine JSONE-Ausnahme ausgelöst, wenn keine solche Zuordnung existiert. Sie können diese Methode also nicht direkt aufrufen.

json.getString("bye")

Wenn Ihre Daten leer sein können (möglicherweise existiert der Schlüssel nicht), versuchen Sie es

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

oder

json.optString("bye");

stattdessen.

In Ihrem Demo-Code, der

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

Dies ist die Zeichenfolge "null" nicht null.

du solltest es benutzen

if(json.isNull("hello")) {
    helloStr = null;
} else {
    helloStr = json.getString("hello");
}

12
2018-03-11 08:36



Überprüfen Sie zuerst mit isNull().... wenn ich nicht arbeiten kann, dann versuchen Sie es unter

und auch du hast JSONObject.NULL um den Nullwert zu prüfen ...

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

und in deinem Fall auch nachsehen resultObject.getString("username").trim().eqauls("null")


3
2018-05-14 18:16



Wenn Sie zuerst json analysieren und später das Objekt behandeln müssen, versuchen Sie es

Parser

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

Handler

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

3
2018-03-07 10:10



Hier ist eine Hilfsmethode, die ich verwende, damit ich JSON-Zeichenfolgen mit nur einer Codezeile abrufen kann:

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

und dann so etwas:

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

würde Ihnen Ihren String-Wert geben oder Ihre String-Variable auf null setzen. Ich benutze Gson, wann immer ich kann, um Fallstricke wie diese zu vermeiden. Es behandelt null Werte viel besser meiner Meinung nach.


2
2017-07-30 00:46