java - studio - Android Json y valores nulos
save json android (6)
Aquí hay un método de ayuda que utilizo para que pueda obtener cadenas JSON con una sola línea de código:
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;
}
}
y luego algo como esto:
String mFirstName = getJsonString(jsonObject, "first_name");
le daría el valor de su cadena o establecería de manera segura su variable de cadena en nulo. Uso Gson siempre que puedo para evitar trampas como estas. Maneja valores nulos mucho mejor en mi opinión.
¿Cómo puedo detectar cuándo un valor json es nulo? por ejemplo: [{"username": null}, {"username": "null"}]
El primer caso representa un nombre de usuario inexistente y el segundo un usuario llamado "nulo". Pero si intenta recuperarlos, ambos valores dan como resultado la cadena "nulo"
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 salida de registro es
{"hello":"null","bye":null}
hello=null is null? false
bye=null is null? false
Como JSONObject # getString devuelve un valor si la clave dada existe, no es nulo por definición. Esta es la razón por la que JSONObject.NULL existe: para representar un valor JSON nulo.
json.getString("hello").equals(JSONObject.NULL); // should be false
json.getString("bye").equals(JSONObject.NULL); // should be true
Para Android, se generará una excepción JSONException si no existe dicha asignación. Entonces no puedes llamar a este método directamente.
json.getString("bye")
si sus datos pueden estar vacíos (puede que no exista la clave), intente
json.optString("bye","callback string");
o
json.optString("bye");
en lugar.
En su código de demostración, el
JSONObject json = new JSONObject("{/"hello/":null}");
json.getString("hello");
esto que obtienes es String "null" no nulo.
tu uso shoud
if(json.isNull("hello")) {
helloStr = null;
} else {
helloStr = json.getString("hello");
}
Pruebe con json.isNull( "field-name" )
.
Referencia: http://developer.android.com/reference/org/json/JSONObject.html#isNull%28java.lang.String%29
Si primero debe analizar json y manejar el objeto más adelante, intente esto
Analizador
Object data = json.get("username");
Entrenador de animales
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;
}
primer control con isNull()
... si no puede funcionar, intente debajo
y también tiene JSONObject.NULL
para verificar el valor nulo ...
if ((resultObject.has("username")
&& null != resultObject.getString("username")
&& resultObject.getString("username").trim().length() != 0)
{
//not null
}
y en su caso también marque resultObject.getString("username").trim().eqauls("null")