Hvordan sjekke for tom verdi for GSON element?

stemmer
15

Jeg har en blokk av JSON data som følger: (forenklet for lesbarhet):

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

Jeg bruker GSON bibliotek (se https://code.google.com/p/google-gson/ ) for å behandle denne JSON i et java-program.

Problemet jeg møter er med den sectionCode attributt (det andre element i listen ovenfor). Med andre JSON blokker av data som jeg behandlingen, dette element enten ikke eksisterer, eller eksisterer, og inneholder et heltall som verdi for eksempel 14. Dette forårsaker ingen problemer. Her, derimot, er verdien for sectionCode er bare .

Nedenfor er koden Jeg bruker å behandle dette segmentet av JSON- blokken (der jsonrootinneholder blokken av JSON data):

 //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 mange forhold i 'hvis' setning, er et forsøk på å detektere tomme strengen i verdien for den sectionCode attributt, og således forhindre det følgende 'getAsInt' kode fra utføring dersom dette er tilfelle. Jeg forventet at det ville bli fanget opp av minst en av dem, men dette synes ikke å være tilfelle. I stedet, når den støter på denne delen av koden, får jeg følgende feilmelding:

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)

Jeg er klar over at jeg kunne bare akseptere at en NumberFormatException kommer til å skje, og sette en prøve / catch-blokken i å håndtere det, men dette virker som en rotete måte å håndtere situasjonen.

Så spørsmålet mitt er egentlig: Hvorfor er ikke noen av mine forhold i 'hvis' statement oppdage den tomme verdi? Og hva kan jeg bruke i stedet?

Publisert på 18/03/2015 klokken 14:09
bruker
På andre språk...                            


1 svar

stemmer
3

fikk du prøve å bruke String lengde for å se om det er null, slik som denne,

 if ((jsonroot.get("sectionCode") != null) && (jsonroot.get("sectionCode").getAsString().length() != 0))
 {
   sectioncode = jsonroot.get("sectionCode").getAsInt();
 }
Svarte 18/03/2015 kl. 18:11
kilden bruker

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