2012-01-21 84 views
5

En Java, si uso la siguiente cadena JSON como ejemplo, ¿cómo verificaría si los objetos son vacío/nulo?¿Cómo comprobar si el objeto JSON está vacío en Java?

{"null_object_1" : [], "null_object_2" : [null] } 

He intentado usar:

if(!jsonSource.isNull("null_object_1")) {/*null_object_1 is not empty/null*/} 
if(!jsonSource.isNull("null_object_2")) {/*null_object_2 is not empty/null*/} 

Pero estas declaraciones IF todavía devuelven verdadero (como si ellos no son nulos vacío /).

¿Alguien tiene una solución?

Editar: Por "objeto", que en realidad significaba array.

Respuesta

10

Ninguna de esas dos cosas son null; son matrices. El resultado es exactamente lo que esperarías.

Una de sus matrices está vacía, la otra contiene un solo elemento que es null.

Si desea saber si una matriz está vacía, deberá obtenerla y luego verificar su longitud.

JSONObject myJsonObject = 
    new JSONObject("{\"null_object_1\":[],\"null_object_2\":[null]}"); 

if (myJsonObject.getJSONArray("null_object_1").length() == 0) { 
    ... 
} 

Editar para aclarar: Una matriz que no tiene elementos (vacía) y una matriz que tiene un elemento que es null son cosas completamente diferentes. En el caso de su segundo arreglo, no es null ni está vacío. Como mencioné, es una matriz que tiene un único elemento que es null. Si eres interesante para determinar si ese es el caso, necesitarías obtener la matriz y luego recorrerla para probar cada elemento para ver si era null y actuar según los resultados correspondientes.

+0

Gracias por aclarar el nulo de Java (: Estoy demasiado acostumbrado a trabajar con PHP (donde la comprobación de null suele ser tanto vacía como nula). – 92Jacko

+0

Me alegro de poder ayudar. Honestamente, en mi humilde opinión, evitaría el uso de 'null' por esta razón. En Java 'null' tiene un significado especial que no equivale a' 0' o "vacío" - solo se puede asignar a las variables de referencia del objeto e indica que la variable no tiene referencia de objeto asignada. –

2

Según esta documentación JSONObject API, isNull comprueba el valor NULL, que no es cierto en su caso.

Si el valor '' null_object_1 es String, es necesario utilizar cuerdas temp = getString("keyName") y comprobar

!("".equals(temp)); 
Cuestiones relacionadas