从 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;
我有一个 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;