当 JSON returns Null 时,我如何使用 Gson?
How could I works with Gson when JSON returns Null?
我有一个 JSON returns 一些对象 "null"。我正在尝试这个值并使用 Gson 添加到我的对象 Class 中。问题是当这个值等于 null 时我不能这样做因为抛出异常 "NullPointerException"。如果 JSON 对象没有空值我可以工作但如果有空值我不能
我如何使用 null 值执行此操作?
JSON
"Cotacao": {
"endereco": null,
"bairro": null,
"cidade": null
}
Class 对象
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);
我解决了问题。
我做到了
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();
我有一个 JSON returns 一些对象 "null"。我正在尝试这个值并使用 Gson 添加到我的对象 Class 中。问题是当这个值等于 null 时我不能这样做因为抛出异常 "NullPointerException"。如果 JSON 对象没有空值我可以工作但如果有空值我不能
我如何使用 null 值执行此操作?
JSON
"Cotacao": {
"endereco": null,
"bairro": null,
"cidade": null
}
Class 对象
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);
我解决了问题。
我做到了
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();