92 votes

Android Json et les valeurs nulles

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

Le premier cas représente un nom d'utilisateur non existant 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

213voto

K-ballo Points 44794

17voto

Vulcan Points 14343

Comme JSONObject#getString renvoie une valeur si la clé donnée existe, elle n'est pas nulle 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

14voto

shily Points 86

Pour Android, une JSONException sera levée s'il n'existe aucun mappage de ce type. Vous ne pouvez donc pas appeler cette méthode directement.

json.getString("bye")

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

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

ou

json.optString("bye");

à la place.

Dans votre code de démonstration, le

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

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

vous devriez utiliser

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

4voto

Samir Mangroliya Points 21263

Vérifiez d'abord auprès de isNull() .... Si cela ne fonctionne pas, essayez ce qui suit

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

 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")

3voto

doraemon Points 4099

Si vous devez d'abord analyser le json et traiter l'objet plus tard, essayons ceci

Analyseur

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

Manipulateur

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X