web-dev-qa-db-fra.com

Android Json et valeurs nulles

Comment puis-je détecter lorsqu'une valeur JSON est nulle? par exemple: [{"username": null}, {"username": "null"}]

Le premier cas représente un nom d'utilisateur inexistant et le second un utilisateur nommé "null". Mais si vous essayez de les récupérer, les deux valeurs donnent la chaîne "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));

La sortie du journal est

{"hello":"null","bye":null}
hello=null is null? false
bye=null is null? false
86
Addev
209
K-ballo

JSONObject # getString retournant une valeur si la clé donnée existe, il n'est pas null par définition. C’est la raison pour laquelle JSONObject.NULL existe: pour représenter une valeur JSON nulle.

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

Pour Android, une exception JSONException sera générée. Par conséquent, vous ne pouvez pas appeler cette méthode directement.

json.getString("bye")

si vos données peuvent être vides (peut ne pas exister la clé), essayez

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

ou

json.optString("bye");

au lieu.

Dans votre code de démonstration, le

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

ce que vous obtenez est String "null" et non null.

ton utilisation

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

première vérification avec isNull().... si le travail est correct, essayez ensuite belows

et aussi vous avez JSONObject.NULL pour vérifier la valeur null ...

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

et dans votre cas, vérifiez également resultObject.getString("username").trim().eqauls("null")

4
Samir Mangroliya

Si vous devez analyser json en premier et manipuler l’objet plus tard, laissez ceci essayer.

Analyseur

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

Gestionnaire

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
thanhbinh84

Voici une méthode d'assistance que j'utilise pour obtenir des chaînes JSON avec une seule ligne de code:

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

et puis quelque chose comme ça:

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

vous donnerait votre valeur de chaîne ou définiriez en toute sécurité votre variable de chaîne sur null. J'utilise Gson chaque fois que je peux pour éviter de tels pièges. Il gère beaucoup mieux les valeurs nulles à mon avis.

2
Lou Morda