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"

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 

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.

  • HttpClient.execute lanzando OutOfMemoryError
  • Android JSON Jackson Tutorial
  • Convertir cadena a JsonArray
  • Respuesta HTML desde el servidor
  • Sólo el hilo original que creó una jerarquía de vistas puede tocar su excepción de vistas
  • Análisis de la matriz JSON con una sub-matriz con GSON?
  • Android - ¿Mejor alternativa a la lista expandible?
  • ¿Está bien para guardar una matriz JSON en SharedPreferences?
  • JSON válido sigue recibiendo error de análisis
  • Múltiples elementos seleccionados RecyclerView in Activity.java
  • Analizando JSON en Java
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.