Van egy blokk JSON adatok a következők: (egyszerűsített olvashatóságát):
{placeName:Paris,
sectionCode:,
elapsed:FT,
Time:02/24/2015 17:30:00,
Date:02/24/2015 00:00:00,
Score:1 : 1,
statusCode:6};
Én használ a GSON könyvtár (lásd https://code.google.com/p/google-gson/ ) annak érdekében, hogy feldolgozni ezt JSON egy java programot.
A probléma én találkozik az a sectionCode attribútum (a második elem a fenti listában). Más JSON adatblokkot, hogy én feldolgozás, ez az elem vagy nem létezik, vagy nem létezik, és egy egész számot tartalmaz, mint az ár-érték pl 14. Ez sem okoz problémát. Itt azonban az értéket a sectionCode egyszerűen „”.
Alul van a kód, amit jelenleg használ feldolgozni ebben a szegmensben a JSON blokk (ahol jsonroot
tartalmazza a blokk JSON adatok):
//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();
}
A számos feltételek a „ha” nyilatkozat a kísérletet felismerni az üres karakterlánc értékének a sectionCode attribútum, és így megakadályozzák a következő „getAsInt” kódot végrehajtó, ha ez az eset áll fenn. Arra számítottam, hogy nem lenne fogott legalább egy közülük, de ez nem úgy tűnik, hogy ez a helyzet. Ehelyett, amikor találkozik ez a része a kódot, kapok a következő hiba:
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)
Tisztában vagyok azzal, hogy én egyszerűen elfogadni, hogy egy NumberFormatException fog sor, és hogy egy try / catch blokk ezzel foglalkozni, de ez úgy tűnik, mint egy rendetlen módon kezelni a helyzetet.
Szóval a kérdés valójában: Miért nem minden az én feltételek a „ha” utasítás kimutatjuk az üres érték? És mit tehettem volna használni helyette?