@H_301_1@class Person{ @H_301_1@private String name; @H_301_1@private Integer age; @H_301_1@public String getName() { @H_301_1@return name; } @H_301_1@public void setName(String name) { @H_301_1@this.name = name; } @H_301_1@public Integer getAge() { @H_301_1@return age; } @H_301_1@public void setAge(Integer age) { @H_301_1@this.age = age; } }
@H_301_1@public static void main(String[] args) { Person p=@H_301_1@new Person(); JSONObject obj = JSONObject.fromObject(p); System.out.println(obj.toString()); }
运行上面的结果打印:
null
null
{"name":"","age":0}
发现当Integer 类型为null 最后是0,String 为null 最后是“”
从JsonObject的源码中可以找到如下代码:
我的jsonlib的版本是json-lib:jdk15:2.2.3 下面代码是从JsonObject的1037行开始
private static void setValue(JSONObject jsonObject,String key,Object value,Class type,JsonConfig jsonConfig) {
boolean accumulated = false;
if(value == null) {
value = jsonConfig.findDefaultValueProcessor(type).getDefaultValue(type);
if(!JsonVerifier.isValidJsonValue(value)) {
throw new JSONException("Value is not a valid JSON value. " + value);
}
}
当我的属性的值是null,就会通过 jsonConfig.findDefaultValueProcessor(type).getDefaultValue(type)获取对应的值。findDefaultValueProcessor()方法是
DefaultValueProcessor接口中方法,所以就需要我们自己创建DefaultValueProcessor的实现类修改默认值;
修改之后的代码:
@H_301_1@public static void main(String[] args) { JsonConfig config=@H_301_1@new JsonConfig(); config.registerDefaultValueProcessor(Double.@H_301_1@class,@H_301_1@new DefaultValueProcessor() { @Override @H_301_1@public Object getDefaultValue(Class aClass) { @H_301_1@return null; } }); config.registerDefaultValueProcessor(Integer.@H_301_1@class,@H_301_1@new DefaultValueProcessor() { @Override @H_301_1@public Object getDefaultValue(Class aClass) { @H_301_1@return null; } }); config.registerDefaultValueProcessor(Short.@H_301_1@class,@H_301_1@new DefaultValueProcessor() { @Override @H_301_1@public Object getDefaultValue(Class aClass) { @H_301_1@return null; } }); config.registerDefaultValueProcessor(Float.@H_301_1@class,@H_301_1@new DefaultValueProcessor() { @Override @H_301_1@public Object getDefaultValue(Class aClass) { @H_301_1@return null; } }); config.registerDefaultValueProcessor(Byte.@H_301_1@class,@H_301_1@new DefaultValueProcessor() { @Override @H_301_1@public Object getDefaultValue(Class aClass) { @H_301_1@return null; } }); config.registerDefaultValueProcessor(Long.@H_301_1@class,@H_301_1@new DefaultValueProcessor() { @Override @H_301_1@public Object getDefaultValue(Class aClass) { @H_301_1@return null; } }); config.registerDefaultValueProcessor(String.@H_301_1@class,@H_301_1@new DefaultValueProcessor() { @Override @H_301_1@public Object getDefaultValue(Class aClass) { @H_301_1@return null; } }); Person p=@H_301_1@new Person(); JSONObject obj = JSONObject.fromObject(p,config); System.out.println(p.getName()); System.out.println(p.getAge()); System.out.println(obj.toString()); }
运行结果:
null null {"name":null,"age":null}
OK了