zoukankan      html  css  js  c++  java
  • json-lib的一些过滤操作

    package demo4;
    
    import java.io.Serializable;
    
    import net.sf.json.JSONString;
    
    public class User implements JSONString,Serializable{
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        private long id;
        private String name;
        private String password;
        public long getId() {
            return id;
        }
        public void setId(long id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public User(long id, String name, String password) {
            super();
            this.id = id;
            this.name = name;
            this.password = password;
        }
        
        public User() {
            super();
        }
        
        public String toJSONString() {
            return "{"id":"+this.id+","name":""+this.name+""}";
        }
        
        
    
    }
    user.java
    package demo4;
    
    public class Teacher {
        private int id;
        private String name;
        private String password;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public Teacher(int id, String name, String password) {
            super();
            this.id = id;
            this.name = name;
            this.password = password;
        }
        public Teacher() {
            super();
        }
        
    
    }
    Teacher.java
    package demo4;
    
    import java.text.SimpleDateFormat;
    import java.util.Arrays;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    import net.sf.json.JSONObject;
    import net.sf.json.JSONSerializer;
    import net.sf.json.JsonConfig;
    import net.sf.json.processors.JsonBeanProcessor;
    import net.sf.json.processors.JsonValueProcessor;
    import net.sf.json.util.PropertyFilter;
    
    import org.junit.Test;
    
    public class Demo {
        /*
         
        public void registerJsonBeanProcessor(Class target,
                                          JsonBeanProcessor jsonBeanProcessor)
    
        Registers a JsonBeanProcessor.
        [Java -> JSON]
    
        Parameters:
            target - the class to use as key
            jsonBeanProcessor - the processor to register
    
    
         
         
        public void registerPropertyExclusion(Class target,    *注册不转换的属性在类中 *
                                          String propertyName)
    
        Registers a exclusion for a target class.
        [Java -> JSON]
    
        Parameters:
            target - the class to use as key
            propertyName - the property to be excluded
    
    
        
        public void setExcludes(String[] excludes)  设置不转换的属性
            Sets the excludes to use.
            Will set default value ([]) if null.
            [Java -> JSON] 
            
            
            
            
        PropertyFilter: 属性过滤器
            一个方法:
             apply
    
        boolean apply(Object source,
                  String name,
                  Object value)
    
        Parameters:
            source - the owner of the property
            name - the name of the property
            value - the value of the property 
        Returns:
            true if the property will be filtered out, false otherwise
    
    
         */
        
        
    
        /**
         * 忽略不必要属性重写该对象指定toJSONString方法测试
         */
        @Test
        public void fun(){
            User user=new User(12,"郭大侠","gz1234");
            JSONObject jo=JSONObject.fromObject(user);
            System.out.println(jo);
        }
        
        /**
         * 忽略不必要的属性,使用jsonConfig实现
         * 通过jsonconfig实例,对包含和需要排除的属性进行方便的添加或删除
         */
        @Test
        public void fun1(){
            Teacher t=new Teacher(12,"guodaxia","gz1234");
            JsonConfig config=new JsonConfig();
            config.setExcludes(new String[]{"password"});//设置排除password属性
            JSONObject jo=JSONObject.fromObject(t, config);
            System.out.println(jo);
        }
        
        /**
         * 测试使用属性过滤器达到前面的效果
         * 使用propertyFilter可以允许同时对需要排除的属性和类进行控制,这种控制还可以是双向的,也可以应用到json字符串到java对象
         */
        @Test
        public void fun2(){
            Teacher t=new Teacher(12,"guodaxia","gz1234");
            JsonConfig config=new JsonConfig();
            config.setJsonPropertyFilter(new PropertyFilter() {
                
                public boolean apply(Object source, String propertyName, Object value) {
                    /**
                     * 就这样将Teacher类中的password属性过滤掉了
                     */
    //                return source instanceof Teacher && "password".equalsIgnoreCase(propertyName);
                    return  "password".equalsIgnoreCase(propertyName);//这个是测试它可以双向过滤
                }
                
            });
            JSONObject jo=JSONObject.fromObject(t, config);
            System.out.println(jo);
            JSONObject jo1=(JSONObject) JSONSerializer.toJSON("{'id':12,'name':'gz','password':'a12345'}", config);//这里使用JSONSerializer得到的JSON对象才有效可转换为Teacher对象,JSONObject.fromObject不行,不知为何
            Teacher tt=(Teacher) jo1.toBean(jo1, Teacher.class );
            System.out.println(tt.getId()+"--"+tt.getName()+"--"+tt.getPassword());
            
    //        JSONObject jo1=JSONObject.fromObject("{'id':12,'name':'gz','password':'a12345'}",config);
    //        Object tt=  JSONObject.toBean(jo1);
    //        System.out.println(tt);
            
        }
        
        /**
         * 使用registerPropertyExclusion达到前面的效果
         */
        @Test
        public void fun3(){
            Teacher t=new Teacher(12,"guodaxia","gz1234");
            JsonConfig config=new JsonConfig();
            config.registerPropertyExclusion(Teacher.class, "password");
            JSONObject jo=JSONObject.fromObject(t, config);
            System.out.println(jo);
            
        }
        
        /**
         * 测试使用自定义JSONBeanProcessor
         * JsonBeanProcessor和实现JsonString很类似,返回一个代表原来目标对象的合法JSONObject
         * 
         */
        @Test
        public void fun4(){
            JsonConfig config=new JsonConfig();
            config.registerJsonBeanProcessor(Teacher.class,new JsonBeanProcessor() {
                
                public JSONObject processBean(Object bean, JsonConfig config) {
                    Teacher tea=(Teacher)bean;
                    return new JSONObject().element("id", tea.getId()).element("name", tea.getName());
                }
            });
            Teacher t=new Teacher(12,"JSON","json");
            System.out.println(JSONObject.fromObject(t,config));
            
            
        }
        
        /**
         * 自定义JsonValueProcessor
         * 比如我们要控制JSON序列化过程中的Date对象的格式化以及数值的格式化,JsonValueProcessor是最好的选择
         * 该方法可以用来处理数据,进行格式化操作等等
         */
        @Test
        public void fun5(){
            Map<String,Object> map=new HashMap<String,Object>();
            map.put("date", new Date());
            map.put("dates", Arrays.asList(new Date()));
            JsonConfig config=new JsonConfig();
            config.registerJsonValueProcessor(Date.class, new JsonValueProcessor() {
                //自定义日期处理格式
                SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
                
                /**
                 *处理单个Date对象 
                 */
                public Object processObjectValue(String propertyName, Object date, JsonConfig config) {
                    return sdf.format(date);
                }
                
                public Object processArrayValue(Object date, JsonConfig config) {
                    return sdf.format(date);
                }
            });
            System.out.println(JSONObject.fromObject(map, config));
            
        }
        
        
    }
  • 相关阅读:
    哈希表存人名。。= =
    转载:风雨20年:我所积累的20条编程经验
    Beginning C# Objects:From Concepts to Code
    数据结构题集
    内部排序算法比较。。= =
    稀疏矩阵运算器
    断念
    .NET Reflector
    Andorid信息推送
    Project2010环境搭建
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/5867487.html
Copyright © 2011-2022 走看看