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
Essayez avec json.isNull( "field-name" )
.
Référence: http://developer.Android.com/reference/org/json/JSONObject.html#isNull%28Java.lang.String%29
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
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");
}
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")
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;
}
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.