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));
}
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章