Muszę bloku danych JSON w następujący sposób: (uproszczone dla czytelności)
{placeName:Paris,
sectionCode:,
elapsed:FT,
Time:02/24/2015 17:30:00,
Date:02/24/2015 00:00:00,
Score:1 : 1,
statusCode:6};
Używam biblioteki GSON (patrz https://code.google.com/p/google-gson/ ) w celu przetworzenia tego JSON w programie java.
Problem mam napotykając jest z atrybutem sectionCode (drugi element na liście powyżej). W innych bloków danych JSON, że jestem przetwarzania, element ten albo nie istnieje, albo nie istnieje, i zawiera liczbę całkowitą jako wartość np 14. To powoduje żadnych problemów. Tutaj jednak wartość dla sectionCode jest po prostu „”.
Poniżej znajduje się kod Używam obecnie do przetworzenia tego segmentu bloku JSON (gdzie jsonroot
zawiera blok danych 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();
}
Liczne warunki w „if” oświadczenia są próbą wykrycia pusty ciąg wartości dla atrybutu sectionCode, a tym samym zapobiec następujący kod „getAsInt” z wykonaniem jeśli jest to przypadek. Spodziewałem się, że będzie złapany przez co najmniej jedną z nich, ale to nie wydaje się być przypadek. Zamiast tego, gdy napotka tę część kodu, pojawia się następujący błąd:
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)
Zdaję sobie sprawę, że mogę po prostu przyjąć, że NumberFormatException ma nastąpić, i umieścić blok try / catch, by radzić sobie z tym, ale wydaje się to niechlujny sposób na radzenie sobie z sytuacją.
Więc moje pytanie jest naprawdę: Dlaczego nie są żadnym z moich warunkach w „if” oświadczenie wykrywającego wartość pusta? I co mogę użyć zamiast tego?