Jsonlib JsonObject.formObject().toString Integer为null 最后结果是0,String 为null ,最后结果是""(空字符串)

前端之家收集整理的这篇文章主要介绍了Jsonlib JsonObject.formObject().toString Integer为null 最后结果是0,String 为null ,最后结果是""(空字符串)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. class Person{
  2. private String name;
  3. private Integer age;
  4.  
  5. public String getName() {
  6. return name;
  7. }
  8.  
  9. public void setName(String name) {
  10. this.name = name;
  11. }
  12.  
  13. public Integer getAge() {
  14. return age;
  15. }
  16.  
  17. public void setAge(Integer age) {
  18. this.age = age;
  19. }
  20. }


  1. public static void main(String[] args) {
  2.  
  3. Person p=new Person();
  4. JSONObject obj = JSONObject.fromObject(p);
  5. System.out.println(obj.toString());
  6. }

运行上面的结果打印:

null
null
{"name":"","age":0}


发现当Integer 类型为null 最后是0,String 为null 最后是“”



从JsonObject的源码中可以找到如下代码

我的jsonlib的版本是json-lib:jdk15:2.2.3 下面代码是从JsonObject的1037行开始

  1. private static void setValue(JSONObject jsonObject,String key,Object value,Class type,JsonConfig jsonConfig) {
  2. boolean accumulated = false;
  3. if(value == null) {
  4. value = jsonConfig.findDefaultValueProcessor(type).getDefaultValue(type);
  5. if(!JsonVerifier.isValidJsonValue(value)) {
  6. throw new JSONException("Value is not a valid JSON value. " + value);
  7. }
  8. }
  1. 当我的属性的值是null,就会通过 jsonConfig.findDefaultValueProcessor(type).getDefaultValue(type)获取对应的值。findDefaultValueProcessor()方法
  1. DefaultValueProcessor接口中方法,所以就需要我们自己创建DefaultValueProcessor的实现类修改默认值;
  1.  
  1. 修改之后的代码:
  1. public static void main(String[] args) {
  2.     JsonConfig config=new JsonConfig();
  3.     config.registerDefaultValueProcessor(Double.class,new DefaultValueProcessor() {
  4.         @Override
  5.         public Object getDefaultValue(Class aClass) {
  6.             return null;
  7.         }
  8.     });
  9.     config.registerDefaultValueProcessor(Integer.class,new DefaultValueProcessor() {
  10.         @Override
  11.         public Object getDefaultValue(Class aClass) {
  12.             return null;
  13.         }
  14.     });
  15.     config.registerDefaultValueProcessor(Short.class,new DefaultValueProcessor() {
  16.         @Override
  17.         public Object getDefaultValue(Class aClass) {
  18.             return null;
  19.         }
  20.     });
  21.     config.registerDefaultValueProcessor(Float.class,new DefaultValueProcessor() {
  22.         @Override
  23.         public Object getDefaultValue(Class aClass) {
  24.             return null;
  25.         }
  26.     });
  27.     config.registerDefaultValueProcessor(Byte.class,new DefaultValueProcessor() {
  28.         @Override
  29.         public Object getDefaultValue(Class aClass) {
  30.             return null;
  31.         }
  32.     });
  33.     config.registerDefaultValueProcessor(Long.class,new DefaultValueProcessor() {
  34.         @Override
  35.         public Object getDefaultValue(Class aClass) {
  36.             return null;
  37.         }
  38.     });
  39.     config.registerDefaultValueProcessor(String.class,new DefaultValueProcessor() {
  40.         @Override
  41.         public Object getDefaultValue(Class aClass) {
  42.             return null;
  43.         }
  44.     });
  45.     Person p=new Person();
  46.     JSONObject obj = JSONObject.fromObject(p,config);
  47.     System.out.println(p.getName());
  48.     System.out.println(p.getAge());
  49.     System.out.println(obj.toString());
  50. }

  1. 运行结果:
  1. null
  2. null
  3. {"name":null,"age":null}
  1. OK

猜你在找的Json相关文章