首页 > 代码库 > 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+"\"}"; } }
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(); } }
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的一些过滤操作
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。