Como verificar o valor vazio para o elemento Gson?

votos
15

I tem um bloco de dados JSON como se segue: (simplificado para legibilidade):

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

Eu estou usando a biblioteca Gson (veja https://code.google.com/p/google-gson/ ), a fim de processar este JSON em um programa java.

O problema que estou enfrentando é com o atributo sectionCode (o segundo elemento da lista acima). Em outros blocos de dados JSON que estou processamento, este elemento ou não existe, ou não existe, e contém um número inteiro, como por exemplo o seu valor 14. Isto faz com que não há problemas. Aqui, no entanto, o valor para o sectionCode é simplesmente .

Abaixo é o código que actualmente utilizado para processar este segmento do bloco JSON (em que jsonrootcontém o bloco de dados 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();
 }

As numerosas condições no 'if' são uma tentativa de detectar a cadeia vazia no valor para o atributo sectionCode, e, assim, evitar o seguinte código 'getAsInt' de execução, se este for o caso. Eu esperava que ele seria pego por pelo menos um deles, mas isso não parece ser o caso. Em vez disso, quando encontra esta parte do código, eu recebo o seguinte erro:

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)

Estou ciente de que eu poderia simplesmente aceitar que um NumberFormatException vai ter lugar, e colocar um bloco try / catch para lidar com isso, mas esta parece ser uma forma confuso para lidar com a situação.

Então, minha pergunta é realmente: Por que não são nenhuma das minhas condições no 'if' detectar o valor vazio? E o que eu poderia usar em vez disso?

Publicado 18/03/2015 em 14:09
usuário
Em outras línguas...                            


1 respostas

votos
3

se você tentar usar o comprimento da corda para ver se ele é zero, como este,

 if ((jsonroot.get("sectionCode") != null) && (jsonroot.get("sectionCode").getAsString().length() != 0))
 {
   sectioncode = jsonroot.get("sectionCode").getAsInt();
 }
Respondeu 18/03/2015 em 18:11
fonte usuário

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