Hoe om te controleren of lege waarde voor GSON element?

stemmen
15

Ik heb een blok JSON data als volgt: (vereenvoudigd voor leesbaarheid):

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

Ik gebruik de GSON bibliotheek (zie https://code.google.com/p/google-gson/ ) om deze JSON in een Java-programma te verwerken.

Het probleem ik heb tegenkomen is met de sectionCode attribuut (het tweede element in de lijst hierboven). In andere JSON blokken van gegevens die ik verwerken, dit element bestaat niet of bestaat, en bevat een integer als waarde bijvoorbeeld 14. Dit veroorzaakt geen problemen. Hier is echter de waarde voor de sectionCode is gewoon .

Hieronder is de code Ik gebruik dit segment van de JSON blok (indien verwerken jsonrootomvat het blok JSON gegevens):

 //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();
 }

De talrijke omstandigheden in de 'if' statement zijn een poging om de lege string op te sporen in de waarde voor het sectionCode attribuut, en daarmee te voorkomen dat de volgende 'getAsInt' programmacode wordt uitgevoerd als dit het geval is. Ik had verwacht dat het zou worden gevangen door ten minste een van hen, maar dit lijkt niet het geval te zijn. In plaats daarvan, wanneer zij dit deel van de code tegenkomt, krijg ik de volgende foutmelding:

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)

Ik ben me ervan bewust dat ik kon gewoon accepteren dat een NumberFormatException gaat plaatsvinden, en zet een try / catch-blok in om te gaan met dat, maar dit lijkt een rommelige manier om te gaan met de situatie.

Dus mijn vraag is eigenlijk: Waarom zijn niet een van mijn omstandigheden in de 'if' statement detecteren van de lege waarde? En wat kon ik in plaats daarvan gebruiken?

De vraag is gesteld op 18/03/2015 om 14:09
user
In andere talen...                            


1 antwoorden

stemmen
3

heb je proberen om de String lengte gebruiken om te zien of het nul is, zoals deze,

 if ((jsonroot.get("sectionCode") != null) && (jsonroot.get("sectionCode").getAsString().length() != 0))
 {
   sectioncode = jsonroot.get("sectionCode").getAsInt();
 }
antwoordde op 18/03/2015 om 18:11
bron van user

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