从 json 字符串反序列化为对象时如何忽略 null?

how to ignore null when deserializing from json string to object?

我有一个 class 定义如下:

// Ignore all the unknown properties in input JSON
@JsonIgnoreProperties(ignoreUnknown = true)

// Only include non null values in deserialized Java object.
@JsonInclude(value = Include.NON_NULL)
public class Person {


@JsonProperty("person_id")
private String personId;

@JsonProperty("school")
private String school;

@JsonProperty("hobbies")
private Map<String, List<AttributeBag>> hobbies = new   HashMap<String, List<AttributeBag>>();

@JsonProperty("tasks")
private Map<String, Map<String, AttributeBag>> tasks = new HashMap<String, Map<String, AttributeBag>>();



 public Map<String, List<AttributeBag>> getHobbies() {
    return hobbies;
}


   public Person(String person_id, String school) {
    super();
    this.person_id = person_id;
    this.school = school;

}

当我使用下面的 JSON 字符串将字符串反序列化为对象时,

 {
"person_id":"123",
"school":"stanford University"
}

从我反序列化的对象来看,hobbies 已创建但为空,甚至没有创建 tasks。我期待像 "tasks" 这样的方式,如果 JSON 中没有相应的字段,它不应该在对象中反序列化。

但奇怪的是:当我检查 object.getHobbies()!=null 但任务部分为空时。如果它们不存在于 JSON 中,我希望它们在对象中都为 null。

我有一个 Person class 的构造函数,但我没有同时初始化爱好和任务部分。

非常感谢

@JsonProperty("hobbies")
private Map<String, List<AttributeBag>> hobbies = new   HashMap<String, List<AttributeBag>>();

@JsonProperty("tasks")
private Map<String, Map<String, AttributeBag>> tasks = new HashMap<String, Map<String, AttributeBag>>();

从上面的代码可以清楚地看出,你正在为爱好和任务创建 new 对象,无论如何,我无法理解为什么你的任务没有创建(它应该得到创建为空地图)

并回答您的问题 @JsonInclude(value = Include.NON_NULL) 应该可以解决问题![​​=12=]

JSON 反序列化器不会尝试设置未出现在 JSON 结构中的字段,但是这些行:

@JsonProperty("hobbies")
private Map<String, List<AttributeBag>> hobbies = new   HashMap<String, List<AttributeBag>>();

@JsonProperty("tasks")
private Map<String, Map<String, AttributeBag>> tasks = new HashMap<String, Map<String, AttributeBag>>();

正在创建对象构造的值。

如果你想让它们为空那么不要在对象中分配它们,只留下声明:

@JsonProperty("hobbies")
private Map<String, List<AttributeBag>> hobbies;

@JsonProperty("tasks")
private Map<String, Map<String, AttributeBag>> tasks;