Json-lib的处理机制(3)--Filter接口
来源:互联网 发布:关于养鱼的软件 编辑:程序博客网 时间:2024/05/02 04:16
概述
Json-lib中的Filter都实现了这个接口net.sf.json.util.PropertyFilter
这个接口只有一个核心的方法:
public interface PropertyFilter { /** * @param source the owner of the property * @param name the name of the property * @param value the value of the property * @return true if the property will be filtered out, false otherwise */ boolean apply( Object source, String name, Object value );}
如果返回ture,则这个属性被忽略,否则就会显示这个属性。这个功能就是当Java对象属性过多,需要过滤一些属性的时候,可以扩展这个Filter进行处理!
一个Filter的列子
public class MyPropertyFilter implements PropertyFilter { /** * 过滤掉birthday属性 */ @Override public boolean apply(Object arg0, String arg1, Object arg2) { if(arg1.equals("birthday")) { return true; } else { return false; } } public static void main(String[] args) { // 万能的MyObject MyObject obj = new MyObject(); obj.name = "name11"; obj.num = 100L; System.out.println(JSONObject.fromObject(obj)); JsonConfig config = new JsonConfig(); config.setJsonPropertyFilter(new MyPropertyFilter()); JSONObject fromObject = JSONObject.fromObject(obj, config); System.out.println(fromObject.toString()); }}
控制台输出
{"birthday":null,"firstDay":null,"name":"name11","num":100,"son":null}{"firstDay":null,"name":"name11","num":100,"son":null}
“brithday”没有显示,这个功能很好理解。可以根据我们实际情况进行适当的扩展!
默认实现
当然这个Filter也有很多默认的实现!都在filters这个目录下:
AndPropertyFilter.java
/** * @author Andres Almiray <aalmiray@users.sourceforge.net> */public class AndPropertyFilter implements PropertyFilter { private PropertyFilter filter1; private PropertyFilter filter2; public AndPropertyFilter( PropertyFilter filter1, PropertyFilter filter2 ) { this.filter1 = filter1; this.filter2 = filter2; } public boolean apply( Object source, String name, Object value ) { if( filter1 != null && filter1.apply( source, name, value ) && filter2 != null && filter2.apply( source, name, value ) ){ return true; } return false; }}
CompositePropertyFilter.java
/** * @author Andres Almiray <aalmiray@users.sourceforge.net> */public class CompositePropertyFilter implements PropertyFilter { private List filters = new ArrayList(); public CompositePropertyFilter() { this( null ); } public CompositePropertyFilter( List filters ) { if( filters != null ){ for( Iterator i = filters.iterator(); i.hasNext(); ){ Object filter = i.next(); if( filter instanceof PropertyFilter ){ this.filters.add( filter ); } } } } public void addPropertyFilter( PropertyFilter filter ) { if( filter != null ){ filters.add( filter ); } } public boolean apply( Object source, String name, Object value ) { for( Iterator i = filters.iterator(); i.hasNext(); ){ PropertyFilter filter = (PropertyFilter) i.next(); if( filter.apply( source, name, value ) ){ return true; } } return false; } public void removePropertyFilter( PropertyFilter filter ) { if( filter != null ){ filters.remove( filter ); } }}
FalsePropertyFilter.java
/** * @author Andres Almiray <aalmiray@users.sourceforge.net> */public class FalsePropertyFilter implements PropertyFilter { public boolean apply( Object source, String name, Object value ) { return false; }}
MappingPropertyFilter.java
抽象类
/** * @author Andres Almiray <aalmiray@users.sourceforge.net> */public abstract class MappingPropertyFilter implements PropertyFilter { private Map filters = new HashMap(); public MappingPropertyFilter() { this( null ); } public MappingPropertyFilter( Map filters ) { if( filters != null ){ for( Iterator i = filters.entrySet() .iterator(); i.hasNext(); ){ Map.Entry entry = (Map.Entry) i.next(); Object key = entry.getKey(); Object filter = entry.getValue(); if( filter instanceof PropertyFilter ){ this.filters.put( key, filter ); } } } } public void addPropertyFilter( Object target, PropertyFilter filter ) { if( filter != null ){ filters.put( target, filter ); } } public boolean apply( Object source, String name, Object value ) { for( Iterator i = filters.entrySet() .iterator(); i.hasNext(); ){ Map.Entry entry = (Map.Entry) i.next(); Object key = entry.getKey(); if( keyMatches( key, source, name, value ) ){ PropertyFilter filter = (PropertyFilter) entry.getValue(); return filter.apply( source, name, value ); } } return false; } public void removePropertyFilter( Object target ) { if( target != null ){ filters.remove( target ); } } protected abstract boolean keyMatches( Object key, Object source, String name, Object value );}
NotPropertyFilter.java
/** * @author Andres Almiray <aalmiray@users.sourceforge.net> */public class NotPropertyFilter implements PropertyFilter { private PropertyFilter filter; public NotPropertyFilter( PropertyFilter filter ) { this.filter = filter; } public boolean apply( Object source, String name, Object value ) { if( filter != null ){ return !filter.apply( source, name, value ); } return false; }}
OrPropertyFilter.java
/** * @author Andres Almiray <aalmiray@users.sourceforge.net> */public class OrPropertyFilter implements PropertyFilter { private PropertyFilter filter1; private PropertyFilter filter2; public OrPropertyFilter( PropertyFilter filter1, PropertyFilter filter2 ) { this.filter1 = filter1; this.filter2 = filter2; } public boolean apply( Object source, String name, Object value ) { if( (filter1 != null && filter1.apply( source, name, value )) || (filter2 != null && filter2.apply( source, name, value )) ){ return true; } return false; }}
TruePropertyFilter.java
/** * @author Andres Almiray <aalmiray@users.sourceforge.net> */public class TruePropertyFilter implements PropertyFilter { public boolean apply( Object source, String name, Object value ) { return true; }}
0 0
- Json-lib的处理机制(3)--Filter接口
- Json-lib的处理机制(1)--Processor接口
- Json-lib的处理机制(2)--ProcessorMatcher接口
- servlet filter实现接口json请求的日志记录
- 解决json-lib的一些序列化循环处理问题
- json-lib 日期处理类的一些用法
- Python接口对json串的处理
- Java 使用 json-lib 处理 JSON
- 使用json.org和json-lib来处理json字符串和java对象的转化
- 使用json-lib来处理数据(配合jquery)
- json-lib的json转换
- json-lib的使用
- JSON-Lib的使用
- json-lib的用法
- json lib的使用
- json-lib的使用
- json-lib的使用
- Json-lib的使用
- JAVA 连接FTP(JDK1.7)
- find命令快速入拾遗
- Spark Streaming
- Spring搭配Ehcache实例解析
- 有意思
- Json-lib的处理机制(3)--Filter接口
- Halcon中使用elliptic_axis算子计算物件角度时的注意事项
- 2016找工作面试(2)
- 将对象以二进制形式序列化为文本
- 微信小程序 数据访问实例详解
- Linux ./configure && make && make install 编译安装和卸载
- 纵横字谜的答案(Crossword Answer,ACM/ICPC Word Finals 1994,UVa232)
- 让UE4中的TextRender永远面向摄像机,就像Billboard那样!
- 网站栏目html+css代码编写规范