Cómo comprobar si hay valor vacío para el elemento GSON?

votos
15

Tengo un bloque de datos JSON como sigue: (simplificado para readibility):

{placeName:Paris,
 sectionCode:,
 elapsed:FT,
 Time:02/24/2015 17:30:00,
 Date:02/24/2015 00:00:00,
 Score:1 : 1,
 statusCode:6};

Estoy usando la biblioteca GSON (ver https://code.google.com/p/google-gson/ ) con el fin de procesar esta JSON en un programa Java.

El problema que estoy encontrando es con el atributo sectionCode (el segundo elemento en la lista anterior). En otras JSON bloques de datos que estoy procesamiento, este elemento, o bien no existe, o existe, y contiene un número entero como su valor, por ejemplo 14. Esto no causa problemas. Aquí, sin embargo, el valor de la sectionCode es simplemente .

A continuación se muestra el código Actualmente uso para procesar este segmento del bloque de JSON (donde jsonrootcontiene el bloque de datos JSON):

 //deal with situation where no section code is provided
 Integer sectioncode = null;
 if ((jsonroot.get(sectionCode) != null) && (jsonroot.get(sectionCode).getAsString() != null) && (!jsonroot.get(sectionCode).isJsonNull()) && (jsonroot.get(sectionCode).getAsString() != ) && (!jsonroot.get(sectionCode).equals(null))) {
              sectioncode = jsonroot.get(sectionCode).getAsInt();
 }

Las numerosas condiciones en la sentencia 'if' son un intento de detectar la cadena vacía en el valor para el atributo sectionCode, y evitar así que el siguiente código 'getAsInt' se ejecute si este es el caso. Yo esperaba que iba a ser atrapado por al menos uno de ellos, pero esto no parece ser el caso. En cambio, cuando se encuentra con esta parte del código, me sale el siguiente error:

Exception in thread main java.lang.NumberFormatException: For input string: at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at com.google.gson.JsonPrimitive.getAsInt(JsonPrimitive.java:260) at MyProgram.extract_general_page_data(MyProgram.java:235) at MyProgram.load_one_page(MyProgram.java:187) at MyProgram.do_all(MyProgram.java:100) at MyProgram.main(MyProgram.java:47)

Soy consciente de que yo podría simplemente aceptar que un NumberFormatException va a tener lugar, y poner un bloque try / catch en que lidiar con eso, pero esto parece ser una manera desordenada para hacer frente a la situación.

Así que mi pregunta es realmente: ¿Por qué no son ninguna de mis condiciones de la sentencia 'if' detectar el valor vacío? Y ¿qué podía usar en su lugar?

Publicado el 18/03/2015 a las 14:09
por usuario
En otros idiomas...                            


1 respuestas

votos
3

¿trató de utilizar la longitud de cuerda para ver si es cero, como este,

 if ((jsonroot.get("sectionCode") != null) && (jsonroot.get("sectionCode").getAsString().length() != 0))
 {
   sectioncode = jsonroot.get("sectionCode").getAsInt();
 }
Respondida el 18/03/2015 a las 18:11
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more