- 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;
- }
- }
- public static void main(String[] args) {
- Person p=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);
- }
- }
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());}
- 运行结果:
- null
- null
- {"name":null,"age":null}
- OK了