如何检查GSON元素的空值?

uurity8g  于 2022-11-23  发布在  其他
关注(0)|答案(2)|浏览(165)

我有一个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/),以便在Java程序中处理此JSON。
我遇到的问题是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();
 }

“if”语句中的许多条件都是为了检测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块来处理它,但这似乎是一种混乱的处理方式。
所以我的问题是:为什么我在if语句中的任何条件都检测不到空值?我可以用什么来代替呢?

jgwigjjp

jgwigjjp1#

是否尝试使用字符串长度来查看它是否为零,例如,

if ((jsonroot.get("sectionCode") != null) && (jsonroot.get("sectionCode").getAsString().length() != 0))
 {
   sectioncode = jsonroot.get("sectionCode").getAsInt();
 }
kuuvgm7e

kuuvgm7e2#

只需使用isJsonNull()

int sectioncode = jsonroot.get("sectionCode").isJsonNull() ? 0 : jsonroot.get("sectionCode").getAsInt();

相关问题