您的位置:首页 > 编程语言 > Java开发

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

2013-06-20 17:35 603 查看
接着上篇文章,先看下面的代码:

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类型转换为我们希望要的格式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐