对象中包含Date类型转换为json类型的对象时会出现如下问题:转化后发现json字符串为:
{"date":3,"day":4,"hours":16,"minutes":57,"month":11,"seconds":26,"time":1449133046380,"timezoneOffset":-480,"year":115}
和想要的不太一样。
可以使用jsonconfig来改变输出结果:
使用方法:
JsonConfig cfg = new JsonConfig();
cfg.registerJsonValueProcessor(class, new DateJsonValueProcessor());
JSONObject json = JSONObject.fromObject(object, cfg);
class为对应的你想要规范的对象类的class,object为你你要规范的对象。
DateJsonValueProcessor:
<pre name="code" class="html">public class JsonDateValueProcessor implements JsonValueProcessor {
private String format ="yyyy-MM-dd";
public Object processArrayValue(Object value, JsonConfig config) {
return process(value);
}
public Object processObjectValue(String key, Object value, JsonConfig config) {
return process(value);
}
private Object process(Object value){
if(value instanceof Date){
SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.UK);
return sdf.format(value);
}
return value == null ? "" : value.toString();
}
}
processObjectValue和processArrayValue方法为转换对应对象为想要的结果
使用时注意下:我在测试时:
public class testDateJson {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
JsonConfig cfg = new JsonConfig();
cfg.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor());
JSONObject json = JSONObject.fromObject(date, cfg);
System.out.println("json配置:"+json.toString());
}
}
结果返回的结果完全没变,这个date类型必须在对象里不然没啥用。这个是processor是在匹配对象中的属性时调用的,但是date类型对象中属性没有date类型,因此还是原来结果。