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 jsonroot
conté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?