java - GSON : Treat Empty String as null

标签 java json string null gson

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

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

此构建器可以很好地处理空值。 但与此同时,我希望它也将空字符串处理为 null。

如何做到这一点?

最佳答案

您需要 register a custom TypeAdapter包装现有的 String TypeAdapter 并将空字符串替换为 JSON null。

示例代码:

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"]

警告

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

关于java - GSON : Treat Empty String as null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60856421/

相关文章:

java - 有没有办法让 SonarQube 只警告不完整的 Switch 语句?

javascript - 打印多维Javascript数组

javascript - JSON 数组无法使用 Eval 进行解码

java - 我用 split 制作了一个 char[] 并尝试再次将其变成字符串,但我不知道为什么这不起作用

r - 在R中删除String中的重复元素

java - 保存变量以在类中使用

java - 如何从同一实例获取另一个日历结果?

java - 如果一个单词有偶数个字母,则打印该单词每行两个字母?

python - 使用 C++ 客户端通过 Zmq 发送 JSON 对象 - Python 服务器

c# - 正则表达式在第一个空格后获取所有内容