【发布时间】:2020-07-06 10:42:35
【问题描述】:
我正在使用 gson 将 java 对象序列化为 json。
Gson gson = new GsonBuilder().serializeNulls().create();
这个构建器处理空值很好。 但除此之外,我希望它也将空字符串处理为 null。
如何做到这一点?
【问题讨论】:
标签: java json string null gson
我正在使用 gson 将 java 对象序列化为 json。
Gson gson = new GsonBuilder().serializeNulls().create();
这个构建器处理空值很好。 但除此之外,我希望它也将空字符串处理为 null。
如何做到这一点?
【问题讨论】:
标签: java json string null gson
您需要 register a custom TypeAdapter 包装现有的 String TypeAdapter 并用 JSON 空值替换空字符串。
示例代码:
public static void main(String[] args) {
Gson gson = createGson();
System.out.println(gson.toJson(Arrays.asList("foo","bar","",null,"phleem")));
}
static Gson createGson() {
return new GsonBuilder().serializeNulls()
.registerTypeAdapter(String.class,
new EmptyToNullTypeAdapter())
.create();
}
static class EmptyToNullTypeAdapter extends TypeAdapter<String> {
@Override
public void write(final JsonWriter out, final String value) throws IOException {
if (value.isEmpty()) {
out.nullValue();
} else {
TypeAdapters.STRING.write(out, value);
}
}
@Override
public String read(final JsonReader in) throws IOException {
return TypeAdapters.STRING.read(in);
}
}
输出:
["foo","bar",null,null,"phleem"]
警告
最后:不确定这是一个好主意,因为它是一个不对称的解决方案,即当你反序列化一个对象,然后再次序列化它时,你的新对象将不等于原始对象(nulls 而不是空字符串)。
【讨论】: