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));
            
        }
        
        
    }
  • 相关阅读:
    组装query,query汇总,query字段
    POJ 1276, Cash Machine
    POJ 1129, Channel Allocation
    POJ 2531, Network Saboteur
    POJ 1837, Balance
    POJ 3278, Catch That Cow
    POJ 2676, Sudoku
    POJ 3126, Prime Path
    POJ 3414, Pots
    POJ 1426, Find The Multiple
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/5867487.html
Copyright © 2011-2022 走看看