接着上篇文章,先看下面的代码:
Person.java :
public class Person {
private Date hire;
public Date getHire() {
return hire;
}
public void setHire(Date hire) {
this.hire = hire;
}
public Person() {
super();
}
public Person(Date hire) {
super();
this.hire = hire;
}
}
Test.java :
public class Test {
public static void main(String[] args) {
test();
}
public static void test(){
Person p=new Person(new Date());
JSONObject json=JSONObject.fromObject(p);
String json_str=json.toString();
System.out.println(json_str);
}
}
运行程序得到:
{"hire":
{"date":20,"day":4,"hours":17,"minutes":21,"month":5,"seconds":16,
"time":1371720076781,
"timezoneOffset":-480,"year":113}
}
这显然不是我们希望得到的格式。那么怎么解决呢?其实导入的相关jar包里已经给我们预留了我们所需要的接口JsonValueProcessor。
我们可以写一个转换器,并且选择实现框架给我们预留的接口JsonValueProcessor,实现接口中的方法,在这些方法里实现所需要的转换逻辑。
DateProcessor.java :
public class DateProcessor implements JsonValueProcessor {
private String pattern="yyyy-MM-dd";
public void setPattern(String pattern) {
this.pattern = pattern;
}
@Override
public Object processArrayValue(Object arg0, JsonConfig arg1) {
Date date=(Date)arg0;
SimpleDateFormat sdf=new SimpleDateFormat(pattern);
return sdf.format(date);
}
@Override
public Object processObjectValue(String arg0, Object arg1, JsonConfig arg2) {
Date date=(Date)arg1;
SimpleDateFormat sdf=new SimpleDateFormat(pattern);
return sdf.format(date);
}
}
然后改写
Test.java :
public class Test {
public static void main(String[] args) {
test();
}
public static void test(){
Person p=new Person(new Date());
DateProcessor processor=new DateProcessor();
JsonConfig config=new JsonConfig();
config.registerJsonValueProcessor(Date.class,processor);
JSONObject json=JSONObject.fromObject(p,config);
String json_str=json.toString();
System.out.println(json_str);
}
}
此时再运行程序得到:
{"hire":"2013-06-20"}
这样就可以将Date类型转换为我们希望要的格式。