Jak kontrolovat prázdnou hodnotu pro GSON prvek?

hlasů
15

Mám blok dat JSON takto: (zjednodušená pro čitelnost):

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

Já používám knihovnu GSON (viz https://code.google.com/p/google-gson/ ), aby bylo možné tuto JSON v java programu.

Problém jsem se setkávat se s atributem sectionCode (druhý prvek v seznamu výše). V jiných JSON bloků dat, které jsem zpracování, tento prvek buď neexistuje, nebo neexistuje, a obsahuje celé číslo jako jeho hodnota, např 14. To nezpůsobuje žádné problémy. Zde se však hodnota pro sectionCode je prostě „“.

Níže je uveden kód I v současné době používají pro zpracování tohoto segmentu JSON bloku (pokud jsonrootobsahuje blok dat 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();
 }

Četné podmínky v ‚kdyby‘ prohlášení jsou pokusem odhalit prázdný řetězec hodnoty atributu sectionCode, a tím zabránit následující ‚getAsInt‘ kód z provádění, pokud je to váš případ. Očekával jsem, že by bylo možné ulovit alespoň jeden z nich, ale to se nezdá být tento případ. Místo toho, když narazí na tuto část kódu, dostanu následující chybu:

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)

Jsem si vědom toho, že jsem mohl jednoduše akceptovat, že NumberFormatException se bude konat, a dát blok try / catch v se s tím vypořádat, ale to vypadá jako chaotický způsob, jak situaci řešit.

Takže moje otázka zní skutečně: proč nejsou některá z mých podmínek v ‚kdyby‘ prohlášení detekuje prázdnou hodnotu? A to, co bych mohl použít místo?

Položena 18/03/2015 v 14:09
uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
3

jste zkusit použít délka řetězce, aby zjistil, jestli to je nula, jako je tento,

 if ((jsonroot.get("sectionCode") != null) && (jsonroot.get("sectionCode").getAsString().length() != 0))
 {
   sectioncode = jsonroot.get("sectionCode").getAsInt();
 }
Odpovězeno 18/03/2015 v 18:11
zdroj uživatelem

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