【问题标题】:gson : Treat Empty String as nullgson : 将空字符串视为 null
【发布时间】:2020-07-06 10:42:35
【问题描述】:

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

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

这个构建器处理空值很好。 但除此之外,我希望它也将空字符串处理为 null。

如何做到这一点?

【问题讨论】:

    标签: java json string null gson


    【解决方案1】:

    您需要 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 而不是空字符串)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多