Jak sprawdzić dla pustej wartości dla elementu GSON?

głosy
15

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 jsonrootzawiera 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?

Utwórz 18/03/2015 o 14:09
użytkownik
W innych językach...                            


1 odpowiedzi

głosy
3

pan spróbuje użyć długości łańcucha, aby zobaczyć, czy jest zero, takie jak ten,

 if ((jsonroot.get("sectionCode") != null) && (jsonroot.get("sectionCode").getAsString().length() != 0))
 {
   sectioncode = jsonroot.get("sectionCode").getAsInt();
 }
Odpowiedział 18/03/2015 o 18:11
źródło użytkownik

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