Как проверить пустое значение для GSON элемента?

голоса
15

У меня есть блок данных JSON следующим образом: (упрощены для 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};

Я использую библиотеку 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 будет иметь место, и положить / поймать блок попробовать, чтобы справиться с этим, но это похоже на грязный способ справиться с ситуацией.

Так что мой вопрос действительно: почему не какой-либо из моих условий в «если» заявление обнаруживая пустое значение? А что я мог использовать вместо этого?

Задан 18/03/2015 в 14:09
пользователем
На других языках...                            


1 ответов

голоса
3

Вы пытаетесь использовать длину строки, чтобы увидеть, если она равна нулю, такие как это,

 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