Πώς να ελέγξει για κενή τιμή για GSON στοιχείο;

ψήφοι
15

Έχω ένα μπλοκ των δεδομένων JSON ως εξής: (απλοποιημένη για ευανάγνωστου):

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

Είμαι με τη χρήση της βιβλιοθήκης GSON (βλ https://code.google.com/p/google-gson/ ), προκειμένου να επεξεργαστεί αυτό το JSON σε ένα πρόγραμμα java.

Το πρόβλημα Είμαι αντιμετωπίζουν είναι με την ιδιότητα sectionCode (το δεύτερο στοιχείο στην παραπάνω λίστα). Σε άλλα μπλοκ JSON των δεδομένων που είμαι επεξεργασίας, το στοιχείο αυτό είτε δεν υπάρχει, ή δεν υπάρχει, και περιέχει έναν ακέραιο ως τιμή π.χ. του 14. Αυτό προκαλεί κανένα πρόβλημα. Εδώ, όμως, η τιμή για το sectionCode είναι απλά «».

Παρακάτω είναι ο κώδικας που χρησιμοποιούν επί του παρόντος για την επεξεργασία αυτό το τμήμα του μπλοκ JSON (όπου jsonrootπεριέχει το μπλοκ των δεδομένων 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();
 }

Οι πολυάριθμες συνθήκες στην «εάν» δήλωση είναι μια προσπάθεια να ανιχνεύσει την κενή συμβολοσειρά στην τιμή για το χαρακτηριστικό sectionCode, και έτσι να εμποδίσει τον ακόλουθο κώδικα «getAsInt με τα πόδια από την εκτέλεση, αν αυτή είναι η περίπτωση. Περίμενα ότι θα πρέπει να πιαστεί από τουλάχιστον ένα από αυτά, αλλά αυτό δεν φαίνεται να συμβαίνει. Αντ 'αυτού, όταν συναντά αυτό το τμήμα του κώδικα, παίρνω το ακόλουθο μήνυμα λάθους:

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)

Γνωρίζω ότι θα μπορούσα απλά να δεχτούμε ότι ένα NumberFormatException πρόκειται να λάβει χώρα, και να θέσει ένα μπλοκ try / catch, για να ασχοληθεί με αυτό, αλλά αυτό φαίνεται σαν ένα ακατάστατο τρόπο για την αντιμετώπιση της κατάστασης.

Το ερώτημά μου είναι πραγματικά: Γιατί δεν είναι καμία από τις συνθήκες μου το «εάν» δήλωση ανίχνευση της κενή τιμή; Και τι θα μπορούσε να χρησιμοποιήσω αντ 'αυτού;

Δημοσιεύθηκε 18/03/2015 στις 14:09
χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
3

δεν μπορείτε να προσπαθήσετε να χρησιμοποιήσετε το μήκος String για να δείτε αν είναι μηδέν, όπως αυτή,

 if ((jsonroot.get("sectionCode") != null) && (jsonroot.get("sectionCode").getAsString().length() != 0))
 {
   sectioncode = jsonroot.get("sectionCode").getAsInt();
 }
Απαντήθηκε 18/03/2015 στις 18:11
πηγή χρήστη

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