现在的位置: 首页 > 综合 > 正文

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

2013年10月13日 ⁄ 综合 ⁄ 共 1625字 ⁄ 字号 评论关闭

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

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类型转换为我们希望要的格式。

抱歉!评论已关闭.