Cum de a verifica valoarea gol pentru elementul GSON?

voturi
15

Am un bloc de date JSON, după cum urmează: (simplificată pentru lizibilitate):

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

Sunt folosind biblioteca GSON ( a se vedea https://code.google.com/p/google-gson/ ) pentru a procesa această JSON într - un program Java.

Problema am confruntă este cu atributul sectionCode (al doilea element din lista de mai sus). În alte blocuri JSON de date pe care am de prelucrare, acest element fie nu există, fie nu există, și conține un număr întreg ca valoare a acesteia de exemplu 14. Acest lucru nu cauzează probleme. Aici, cu toate acestea, valoarea pentru sectionCode este pur și simplu „“.

Mai jos este codul Eu folosesc în prezent pentru a procesa acest segment al blocului JSON ( în cazul în care jsonrootconține blocul de date 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();
 }

Numeroasele condiții în „dacă“ declarație reprezintă o încercare de a detecta șir gol în valoarea pentru atributul sectionCode, prevenind astfel următorul cod „getAsInt“ de la executare în cazul în care acesta este cazul. Am așteptat ca ar fi prins de către cel puțin una dintre ele, dar acest lucru nu pare să fie cazul. În schimb, atunci când întâlnește această parte a codului, am obține următoarea eroare:

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)

Sunt conștient de faptul că pur și simplu am putut accepta că o NumberFormatException va avea loc, și a pus un bloc try / catch în a face cu asta, dar acest lucru pare ca un mod murdar de a face față situației.

Deci, întrebarea mea este într-adevăr: De ce nu sunt oricare dintre condițiile mele în „dacă“ declarație de detectare a valorii gol? Și ce aș putea folosi în schimb?

Întrebat 18/03/2015 la 14:09
de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
3

ați încercat să utilizați lungimea șirului de caractere pentru a vedea dacă este zero, cum ar fi acest lucru,

 if ((jsonroot.get("sectionCode") != null) && (jsonroot.get("sectionCode").getAsString().length() != 0))
 {
   sectioncode = jsonroot.get("sectionCode").getAsInt();
 }
Publicat 18/03/2015 la 18:11
sursa de către utilizator

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