I use 谷歌-gson http://code.google.com/p/google-gson/将 Java 映射序列化为 JSON 字符串。它提供构建器处理空值 https://sites.google.com/site/gson/gson-user-guide#TOC-Null-Object-Support:
Gson gson = new GsonBuilder().serializeNulls().create();
问题是结果是字符串null
, as in:
gson.toJson(categoriesMap));
{"111111111":null}
而所需的结果是:
{"111111111":""}
我可以做一个字符串替换null
and ""
,但这很难看并且容易出错。是否有原生 gson 支持添加自定义字符串而不是null
?
上面的答案对于序列化来说是没问题的,但是在反序列化时,如果有一个字段为空值,Gson会跳过它并且不会进入类型适配器的反序列化方法,因此你需要注册一个TypeAdapterFactory并返回类型适配器它。
Gson gson = GsonBuilder().registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory()).create();
public static class NullStringToEmptyAdapterFactory<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 static 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);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)