我正在尝试将JSON转换为Java对象。当一对中的某个值为null
时,应设置一些默认值。
这是我的POJO:
public class Student {
String rollNo;
String name;
String contact;
String school;
public String getRollNo() {
return rollNo;
}
public void setRollNo(String rollNo) {
this.rollNo = rollNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
}
示例JSON对象:
{
"rollNo":"123", "name":"Tony", "school":null
}
因此,如果学校为null
,我应该将其设为默认值,例如"school":"XXX"
。如何在反序列化对象时使用Gson配置它?
答案 0 :(得分:21)
如果null
在JSON中,Gson将覆盖您可能在POJO中设置的任何默认值。您可能会遇到创建custom deserializer的麻烦,但在这种情况下可能会有点过分。
我认为最简单的(并且可以说是最好的用例)事情相当于Lazy Loading。例如:
private static final String DEFAULT_SCHOOL = "ABC Elementary";
public String getSchool() {
if (school == null) school == DEFAULT_SCHOOL;
return school;
}
public void setSchool(String school) {
if (school == null) this.school = DEFAULT_SCHOOL;
else this.school = school;
}
注意:此解决方案的一个大问题是,要更改默认值,您必须更改代码。如果您希望自定义默认值,则应使用上面链接的自定义反序列化器。
答案 1 :(得分:10)
我认为执行此操作的方法是编写no-args构造函数以填充默认值,或使用custom instance创建者。然后,反序列化器应替换要反序列化的JSON对象中所有属性的默认值。
答案 2 :(得分:0)
您可以简单地创建一个检查null的通用函数
model.SchoolName= stringNullChecker(model.SchoolName);
public static String stringNullChecker(String val) {
if (null == val) val = "";
return val;
}