JSON(3):Java的Date类型转换为符合json语法的字符串遇到的问题及其解决办法

来源:互联网 发布:php msgpack unpack 编辑:程序博客网 时间:2024/05/21 04:26

接着上篇文章,先看下面的代码:

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;}@Overridepublic Object processArrayValue(Object arg0, JsonConfig arg1) {Date date=(Date)arg0;SimpleDateFormat sdf=new SimpleDateFormat(pattern);return sdf.format(date);}@Overridepublic 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类型转换为我们希望要的格式。





原创粉丝点击