Pregunta Android Json y valores nulos


¿Cómo puedo detectar cuándo un valor json es nulo? por ejemplo: [{"nombre de usuario": nulo}, {"nombre de usuario": "nulo"}]

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

75
2018-05-14 18:12


origen


Respuestas:


Prueba con json.isNull( "field-name" ).

Referencia: http://developer.android.com/reference/org/json/JSONObject.html#isNull%28java.lang.String%29


194
2018-05-14 18:15



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

13
2018-05-14 18:16



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

12
2018-03-11 08:36



primer control con isNull().... si no se puede trabajar, prueba debajo

y también tienes 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 verifique resultObject.getString("username").trim().eqauls("null")


3
2018-05-14 18:16



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

3
2018-03-07 10:10



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.


2
2017-07-30 00:46