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 jsonroot
contiene 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?