当JSON返回Null时,我如何使用Gson?

时间:2015-01-21 17:24:21

标签: json gson

我有一个JSON,它返回一些值为“null”的对象。我正在尝试这个值并使用Gson添加到我的Object类中。问题是当这个值等于null时我不能这样做因为抛出异常“NullPointerException”。如果JSON对象没有null值我可以工作,但如果有null值我不能

我怎么能用null值工作呢?

JSON

"Cotacao": {
   "endereco": null,
   "bairro": null,
   "cidade": null      
}

类对象

public class Cotacao implements Serializable {
    private static final long serialVersionUID = 1L;

    private String endereco;
    private String bairro;
    private String cidade;
    //gets sets

获取价值GSON

Gson gson = new Gson();
JSONObject jsoCotacao = jsoObj.getJSONObject("Cotacao");
Cotacao cotacao = gson.fromJson(jsoCotacao.toString(), Cotacao.class);

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。

我做了

public class GsonNullObject<T> implements TypeAdapterFactory {
    public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {

        Class<T> rawType = (Class<T>) type.getRawType();
        if (rawType != String.class) {
            return null;
        }
        return (TypeAdapter<T>) new StringAdapter();
    }
}


public class StringAdapter extends TypeAdapter<String> {
    public String read(JsonReader reader) throws IOException {
        if (reader.peek() == JsonToken.NULL) {
            reader.nextNull();
            return "";
        }
        return reader.nextString();
    }
    public void write(JsonWriter writer, String value) throws IOException {
        if (value == null) {
            writer.nullValue();
            return;
        }
        writer.value(value);
    }
}

使用

Gson gson = new GsonBuilder().registerTypeAdapterFactory(new GsonNullObject<Cotacao>()).create();