Comment vérifier la valeur vide pour l'élément GSON?

voix
15

J'ai un bloc de données JSON comme suit: (simplifié pour readibility):

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

J'utilise la bibliothèque GSON (voir https://code.google.com/p/google-gson/ ) afin de traiter cette JSON dans un programme java.

Le problème que je rencontrais est avec l'attribut sectionCode (le second élément dans la liste ci-dessus). Dans d'autres blocs de données JSON que je suis en train de traiter, cet élément n'existe pas, ou existe, et contient un entier comme valeur par exemple 14. Cela ne pose aucun problème. Ici, cependant, la valeur de la sectionCode est tout simplement « ».

Ci - dessous, le code J'utilise actuellement pour traiter ce segment du bloc de JSON (où jsonrootcontient le bloc de données 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();
 }

Les nombreuses conditions du « si » la déclaration sont une tentative pour détecter la chaîne vide de la valeur pour l'attribut sectionCode, et empêcher ainsi le code « getAsInt » à la suite de l'exécution si tel est le cas. Je pensais qu'il serait pris par au moins un d'entre eux, mais cela ne semble pas être le cas. Au lieu de cela, lorsqu'il rencontre cette partie du code, je reçois l'erreur suivante:

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)

Je suis conscient que je ne pouvais accepter qu'un NumberFormatException va avoir lieu, et de mettre un bloc try / catch pour faire face à cela, mais cela semble être une façon désordonnée pour faire face à la situation.

Donc, ma question est vraiment: Pourquoi pas de mes conditions dans le « if » détection de la valeur vide? Et qu'est-ce que je pourrais utiliser à la place?

Créé 18/03/2015 à 14:09
utilisateur
Dans d'autres langues...                            


1 réponses

voix
3

avez-vous essayé d'utiliser la longueur de chaîne pour voir si elle est égale à zéro, comme celui-ci,

 if ((jsonroot.get("sectionCode") != null) && (jsonroot.get("sectionCode").getAsString().length() != 0))
 {
   sectioncode = jsonroot.get("sectionCode").getAsInt();
 }
Créé 18/03/2015 à 18:11
source utilisateur

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