接着上篇文章,先看下面的代码:
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类型转换为我们希望要的格式。