参考内容:http://swiftlet.net/archives/category/json 十分感谢!!!
这部分的内容主要是讲述 javaBean转换为JSONObect时,如果有些属性不需要转换,那么该如何操作。
过滤属性在什么时候会用到呢?
有时候我们会把对象以json格式传送,如果一个对象携带着一些私人信息,那么我们就要先把这些信息过滤掉,再进行传输了。
一)方法一:实现JSONString接口,实现toJSONString方法
那么我们现在写一个Person类,实现这个JSONString接口
public class Person implements JSONString{ private String name; private String address; private String sex; @Override public String toJSONString() { //{"name" : "name" , "sex" : "sex"},这里省略了address属性,因为我们要把它过滤掉 return "{"name":"" + name + "","sex":"" + sex + ""}"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
然后就写相应的测试
public static void main(String[] args) { /** * 转换为json对象时,排除掉person中address属性的三种方法 */ System.out.println("方法一:Person类实现JSONString接口,实现toJSONString方法"); Person person = new Person(); person.setName("Rime"); person.setSex("men"); person.setAddress("china"); JSONObject json = JSONObject.fromObject(person); System.out.println(json.toString()); }
输出结果:
方法一:Person类实现JSONString接口,实现toJSONString方法
{"name":"Rime","sex":"men"}
二)方法二:在jsonConfig中配置excludes
由于Person类已经使用了方法一,具有侵入性,我们再建一个类Person2
public class Person2 { private String name; private String address; private String sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
然后过滤操作如下:
Person2 person2 = new Person2(); person2.setName("Rime2"); person2.setSex("men"); person2.setAddress("china"); JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setExcludes(new String[] {"address"});//排除掉address属性 JSONObject json2 = JSONObject.fromObject(person2,jsonConfig); System.out.println(json2.toString());
三)方法三:在jsonConfig中配置过滤器,把属性过滤掉
过滤操作如下:
Person2 person3 = new Person2(); person3.setName("Rime3"); person3.setSex("men"); person3.setAddress("china"); JsonConfig jsonConfig2 = new JsonConfig(); //配置过滤器 jsonConfig2.setJsonPropertyFilter(new PropertyFilter() { @Override public boolean apply(Object source, String name, Object value) { //source:对象类型 //name:属性名 //value:属性值 //可根据以上三种组合来过滤 //Person2类型的address属性过滤掉 return source instanceof Person2 && name.equals("address"); } }); JSONObject json3 = JSONObject.fromObject(person3,jsonConfig2); System.out.println(json3.toString());