gson:将空字符串视为null

时间:2020-03-25 19:54:47

标签: java json string null gson

我正在使用gson将Java对象序列化为json。

Gson gson = new GsonBuilder().serializeNulls().create();

此构建器处理有效的空值。 但是与此同时,我希望它也将空字符串也处理为null。

这怎么办?

1 个答案:

答案 0 :(得分:0)

您将需要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”]

注意事项

最后:不确定这是一个好主意,因为它是一个不对称的解决方案,即当您反序列化一个对象,然后再次对其进行序列化时,新对象将不等于原始对象(空值而不是空字符串) )。