Wie für leeren Wert für Gson Element überprüfen?

stimmen
15

Ich habe einen Block von JSON Daten wie folgt: (für Lesbarkeit vereinfacht):

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

Ich bin mit der Gson Bibliothek (siehe https://code.google.com/p/google-gson/ ) , um dieses JSON in einem Java - Programm zu verarbeiten.

Das Problem, das mir begegnet ist, ist mit dem sectionCode Attribute (das zweite Element in der Liste oben). In anderen JSON Blöcken von Daten, die ich verarbeiten, entweder dieses Element nicht vorhanden ist, oder nicht vorhanden ist, und enthält eine ganze Zahl als ihren Wert zB 14. Dies verursacht keine Probleme. Hier aber ist der Wert für die sectionCode einfach „“.

Unten ist der Code I zur Zeit dieses Segment des JSON Block zu verarbeiten verwenden (wobei jsonrootder Block von Daten enthält 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();
 }

Die zahlreichen Bedingungen in der ‚if‘ Anweisung sind ein Versuch, die leere Zeichenfolge in dem Wert für das Attribut sectionCode zu erfassen und somit den folgenden Code ‚getAsInt‘ verhindert die Ausführung, wenn dies der Fall ist. Ich erwartete, dass sie von mindestens einem von ihnen gefangen werden würden, aber dies scheint nicht der Fall zu sein. Stattdessen, wenn es um diesen Teil des Codes begegnet, bekomme ich folgende Fehlermeldung:

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)

Ich bin mir bewusst, dass ich einfach akzeptieren, dass ein Number Platz nehmen wird, und lege einen try / catch-Block in dem zu lösen ist, aber dies scheint wie eine schmutzige Art und Weise, mit der Situation fertig zu werden.

Also meine Frage ist wirklich: Warum sind nicht alle meine Bedingungen in der ‚if‘ Anweisung, um den leeren Werterfassungs? Und was könnte ich stattdessen verwenden?

Veröffentlicht am 18/03/2015 um 14:09
vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
3

haben Sie versucht, die Stringlänge zu verwenden, um zu sehen, ob es Null, wie dies,

 if ((jsonroot.get("sectionCode") != null) && (jsonroot.get("sectionCode").getAsString().length() != 0))
 {
   sectioncode = jsonroot.get("sectionCode").getAsInt();
 }
Beantwortet am 18/03/2015 um 18:11
quelle vom benutzer

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