首页 > 代码库 > json-lib的一些过滤操作

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));            }        }

 

json-lib的一些过滤操作