2012-09-03 38 views
9

No puedo averiguar cómo determinar si un elemento que vive dentro de una matriz json es nulo. Para comprobar si el propio JSONObject es nulo, sólo tiene que utilizar:Cómo comprobar si JSONArray Element es nulo

jsonObject.isNullObject(); 

Pero cuando el objeto es una matriz y quiero comprobar si uno de los elementos de dicha matriz es nulo, esto no funciona:

jsonArray.get(i).get("valueThatIsNull") == null; 

Tampoco hay un método isNull disponible en los elementos de una matriz. ¿Cómo puedo verificar si los valores dentro de jsonarray son nulos? Podría ser útil saber que estoy pasando por alto un objeto nulo de javascript. Quizás null no significa lo mismo en java cuando se pasa de javascript en formato json, pero también he intentado poner paréntesis alrededor del nulo y todavía no funciona.

Estoy publicando un código fuente real para ayudar a aclarar esto. JsonObject es una parte de jsonArray y el objeto tiene múltiples valores porque iself es un objeto.

JSONObject mapItem = jsonArray.getJSONObject(i); 
int id = mapItem.has("id") ? mapItem.getInt("id") : -1; 
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
java.util.Date date = null; 
Date sqlDate = null; 
if(mapItem.has("date")) { 
    String dateStr = mapItem.getString("date"); 
    if(!dateStr.equals("null")) { 
    date = dateFormat.parse(mapItem.getString("date").substring(0, 10)); //Convert javascript date string to java. 
    sqlDate = new Date(date.getTime()); 
} 

Respuesta

13

supongo JSON pasa valores nulos como cadenas, por lo que no puede comprobar nulo como un elemento java. En su lugar tratar el valor nulo como una cadena como comprobar de esta manera:

if(!mapItem.getString("date").equals("null")) { 
    //Value is not null 
} 

He actualizado el fragmento de código en la pregunta original a una versión de trabajo.

14

Trate .isNull():

Para su ejemplo:

if(!mapItem.isNull("date")) { 
    //Value is not null 
} 

Sin embargo, para contestar el título de esta pregunta: "¿cómo saber si un elemento JSONArray es nulo", utilice .equals()

Entonces, para verificar si el índice 1 es nulo:

if (!jsonArray.get(1).equals(null)) { 
    //jsonArray[1] is not null 
} 
0

pruebe el método de JSONArray

public boolean isNull (int index) 

De hecho, se utiliza la "nula" cadena en comparación con el contenido

JSONObject.NULL.equals(this.opt(index)); 
Cuestiones relacionadas