加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Jsonlib JsonObject.formObject().toString Integer为null 最后

发布时间:2020-12-16 18:45:31 所属栏目:百科 来源:网络整理
导读: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 .
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);
            }
        }
当我的属性的值是null,就会通过 jsonConfig.findDefaultValueProcessor(type).getDefaultValue(type)获取对应的值。findDefaultValueProcessor()方法是
DefaultValueProcessor接口中方法,所以就需要我们自己创建DefaultValueProcessor的实现类修改默认值;
 
修改之后的代码:
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了

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读