使用 Gson 或 Jackson 对 JSON 进行 Deserial 化时忽略空字段

2022-09-04 04:33:51

我知道在将对象序列化为JSON时,有很多关于跳过具有空值的字段的问题。我想在将JSON反序列化为对象时跳过/忽略具有空值的字段。

考虑类

public class User {
    Long id = 42L;
    String name = "John";
}

和 JSON 字符串

{"id":1,"name":null}

当做

User user = gson.fromJson(json, User.class)

我想成为“1”,成为“约翰”。user.iduser.name

Gson或Jackson是否能够以一般方式(没有特殊s或类似方式)?TypeAdapter


答案 1

在我的情况下,我所做的是在getter上设置一个默认值

public class User {
    private Long id = 42L;
    private String name = "John";

    public getName(){
       //You can check other conditions
       return name == null? "John" : name;
    }
}

我想这对许多字段来说将是一个痛苦,但它在字段数量较少的简单情况下有效。


答案 2

很多时间过去了,但是如果你像我一样遇到这个问题,并且你至少使用Jackson 2.9,那么你可以用一种方法来理解它,那就是使用JsonSetterNulls.SKIP

public class User {
    private Long id = 42L;
    
    @JsonSetter(Nulls.SKIP)
    private String name = "John";

    ... cooresponding getters and setters  
   
}

这样,当遇到 null 时,将不会调用 setter。

注意:更多详细信息可以在这里找到。