• JSONObject基本内容(二)


    参考内容:http://swiftlet.net/archives/category/json  十分感谢!!!

    这部分的内容主要是讲述 javaBean转换为JSONObect时,如果有些属性不需要转换,那么该如何操作。

    过滤属性在什么时候会用到呢?

    有时候我们会把对象以json格式传送,如果一个对象携带着一些私人信息,那么我们就要先把这些信息过滤掉,再进行传输了。

    一)方法一:实现JSONString接口,实现toJSONString方法

    那么我们现在写一个Person类,实现这个JSONString接口

    public class Person implements JSONString{
        private String name;
        private String address;
        private String sex;
        
        @Override
        public String toJSONString() {
            //{"name" : "name" , "sex" : "sex"},这里省略了address属性,因为我们要把它过滤掉
            return "{"name":"" + name + "","sex":"" + sex + ""}";
        }
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        
    }

    然后就写相应的测试

        public static void main(String[] args) {
            /**
             * 转换为json对象时,排除掉person中address属性的三种方法
             */        
            System.out.println("方法一:Person类实现JSONString接口,实现toJSONString方法");
            
            Person person = new Person();
            person.setName("Rime");
            person.setSex("men");
            person.setAddress("china");
            JSONObject json = JSONObject.fromObject(person);
            System.out.println(json.toString());    
    }

    输出结果:   

    方法一:Person类实现JSONString接口,实现toJSONString方法
    {"name":"Rime","sex":"men"}

    二)方法二:在jsonConfig中配置excludes

    由于Person类已经使用了方法一,具有侵入性,我们再建一个类Person2

    public class Person2 {
        private String name;
        private String address;
        private String sex;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
    }

    然后过滤操作如下:

            Person2 person2 = new Person2();
            person2.setName("Rime2");
            person2.setSex("men");
            person2.setAddress("china");
            JsonConfig jsonConfig = new JsonConfig();
            jsonConfig.setExcludes(new String[] {"address"});//排除掉address属性
            JSONObject json2 = JSONObject.fromObject(person2,jsonConfig);
            System.out.println(json2.toString());

    三)方法三:在jsonConfig中配置过滤器,把属性过滤掉

    过滤操作如下:

            Person2 person3 = new Person2();
            person3.setName("Rime3");
            person3.setSex("men");
            person3.setAddress("china");
            JsonConfig jsonConfig2 = new JsonConfig();
            //配置过滤器
            jsonConfig2.setJsonPropertyFilter(new PropertyFilter() {            
                @Override
                public boolean apply(Object source, String name, Object value) {
                    //source:对象类型
                    //name:属性名
                    //value:属性值
                    //可根据以上三种组合来过滤
                    //Person2类型的address属性过滤掉
                    return source instanceof Person2 && name.equals("address");
                }
            });
            JSONObject json3 = JSONObject.fromObject(person3,jsonConfig2);
            System.out.println(json3.toString());
  • 相关阅读:
    守望先锋-生涯数据信息抓取的实现
    Norm 数据库操作竟然可以如此简单
    java中关于转义字符的一个bug
    在Java中==的一个坑
    人机ai五子棋 ——五子棋AI算法之Java实现
    MySQL数据库罕见的BUG——Can't get hostname for your address
    [疑难杂症]__关于cmd命令正确而显示不是内部指令的错误(ps:已解决)
    [疑难杂症]__点击win10屏幕最上方的边界会莫名其妙打开Internet Explorer浏览器,不胜其烦(2次ps:已解决!!!).
    [Java初探外篇]__关于正则表达式
    [java初探外篇]__关于StringBuilder类与String类的区别
  • 原文地址:https://www.cnblogs.com/vmax-tam/p/4624869.html
Copyright © 2020-2023  润新知