Come verificare la presenza di valore vuoto per l'elemento GSON?

voti
15

Ho un blocco di dati JSON come segue: (semplificato per leggibilità):

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

Sto usando la libreria GSON (vedi https://code.google.com/p/google-gson/ ) al fine di elaborare questo JSON in un programma Java.

Il problema che sto incontrando sia con l'attributo sectionCode (il secondo elemento della lista di cui sopra). In altri blocchi di dati JSON che sto trasformazione, tale elemento o non esiste, o esiste, e contiene un intero come ad esempio il valore 14. Ciò causa problemi. Qui, però, il valore per la sectionCode è semplicemente .

Di seguito è riportato il codice che attualmente uso per elaborare questo segmento del blocco JSON (dove jsonrootcontiene il blocco dei dati 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();
 }

Le numerose condizioni del 'se' istruzione sono un tentativo di rilevare la stringa vuota nel valore dell'attributo sectionCode, e quindi prevenire il seguente codice 'getAsInt' da eseguire se questo è il caso. Mi aspettavo che sarebbe stato catturato da almeno uno di loro, ma questo non sembra essere il caso. Invece, quando incontra questa parte del codice, ottengo il seguente errore:

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)

Sono consapevole che avrei potuto semplicemente accettare che un NumberFormatException sta andando a prendere posto, e mettere un blocco try / catch in a che fare con questo, ma questo mi sembra un modo disordinato per affrontare la situazione.

Quindi la mia domanda è in realtà: Perché non sono una delle mie condizioni nel 'se' dichiarazione rilevare il valore vuoto? E cosa potevo usare, invece?

È pubblicato 18/03/2015 alle 14:09
dall'utente
In altre lingue...                            


1 risposte

voti
3

ha fatto si tenta di utilizzare la lunghezza della stringa per vedere se è pari a zero, come questo,

 if ((jsonroot.get("sectionCode") != null) && (jsonroot.get("sectionCode").getAsString().length() != 0))
 {
   sectioncode = jsonroot.get("sectionCode").getAsInt();
 }
Risposto il 18/03/2015 a 18:11
fonte dall'utente

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