class Person{ private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }@H_404_69@
public static void main(String[] args) { Person p=new Person(); JSONObject obj = JSONObject.fromObject(p); System.out.println(obj.toString()); }@H_404_69@
运行上面的结果打印:
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); } } @H_404_69@当我的属性的值是null,就会通过 jsonConfig.findDefaultValueProcessor(type).getDefaultValue(type)获取对应的值。findDefaultValueProcessor()方法是@H_404_69@DefaultValueProcessor接口中方法,所以就需要我们自己创建DefaultValueProcessor的实现类修改默认值;@H_404_69@@H_404_69@修改之后的代码:@H_404_69@public static void main(String[] args) { JsonConfig config=new JsonConfig(); config.registerDefaultValueProcessor(Double.class,new DefaultValueProcessor() { @Override public Object getDefaultValue(Class aClass) { return null; } }); config.registerDefaultValueProcessor(Integer.class,new DefaultValueProcessor() { @Override public Object getDefaultValue(Class aClass) { return null; } }); config.registerDefaultValueProcessor(Short.class,new DefaultValueProcessor() { @Override public Object getDefaultValue(Class aClass) { return null; } }); config.registerDefaultValueProcessor(Float.class,new DefaultValueProcessor() { @Override public Object getDefaultValue(Class aClass) { return null; } }); config.registerDefaultValueProcessor(Byte.class,new DefaultValueProcessor() { @Override public Object getDefaultValue(Class aClass) { return null; } }); config.registerDefaultValueProcessor(Long.class,new DefaultValueProcessor() { @Override public Object getDefaultValue(Class aClass) { return null; } }); config.registerDefaultValueProcessor(String.class,new DefaultValueProcessor() { @Override public Object getDefaultValue(Class aClass) { return null; } }); Person p=new Person(); JSONObject obj = JSONObject.fromObject(p,config); System.out.println(p.getName()); System.out.println(p.getAge()); System.out.println(obj.toString()); }@H_404_69@
@H_404_69@运行结果:@H_404_69@null null {"name":null,"age":null} @H_404_69@OK了@H_404_69@