Android Json y valores nulos
¿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 recuperar ambos valores resultan en la cadena "null"
- Cree un archivo JSON analizable para la aplicación android
- Serializar objeto personalizado que contiene objetos JodaTime en JSON
- JSONException: no hay valor para XYZ al intentar getString ("XYZ")
- Formas de crear objetos JSON en Java
- Cómo borrar un JSONArray
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 del registro es
{"hello":"null","bye":null} hello=null is null? false bye=null is null? false
- Convertir la matriz de JSON a la lista de objetos de la clase Java
- ¿Cómo puedo enviar los encabezados de autenticación básica HTTP en Android?
- Acceder a un objeto JSON dentro de otro objeto JSON
- Excepción no manipulada org.json.jsonexception
- Incluir archivo .json local en el proyecto Eclipse Android
- Android - La llamada requiere el nivel 9 de API (el min actual es 8): android.os.StrictMode # setThreadPolicy
- Nullpointerexception al intentar obtener json array o json object de json string
- LoopJ AndroidAsyncHttp y JSON POST ARRAY
Pruebe con json.isNull( "field-name" )
.
Referencia: http://developer.android.com/reference/org/json/JSONObject.html#isNull%28java.lang.String%29
Debido a que JSONObject # getString devuelve un valor si existe la clave dada, no es nula por definición. Ésta 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 JSONException si no existe dicha asignación. Así que no puedes llamar directamente a este método.
json.getString("bye")
Si los datos pueden estar vacíos (puede que no exista la clave), pruebe
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 se obtiene es String "null" no nulo.
Tu deberías usar
if(json.isNull("hello")) { helloStr = null; } else { helloStr = json.getString("hello"); }
Primero verifique con isNull()
…. si no puede trabajar intente entonces belows
Y también tiene JSONObject.NULL
para comprobar 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 verifique resultObject.getString("username").trim().eqauls("null")
Si primero debe analizar json y manejar el objeto más adelante, deje que pruebe 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; }
He aquí un método de ayuda que utilizo para que pueda obtener cadenas JSON con sólo una 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 su valor de cadena o establecerá con seguridad su variable de cadena a null. Utilizo a Gson siempre que puedo evitar escollos como éstos. Maneja valores nulos mucho mejor en mi opinión.
- Código de la versión de incremento automático en la aplicación para Android
- SDK ubicación no encontrada. Defina la ubicación con sdk.dir en el archivo local.properties o con una variable de entorno ANDROID_HOME