在项目中遇到了这个问题:用JSONObject插件将JavaBean或List转换为JSON格式的字符串,而JavaBean的属性有时候会有java.util.Date这个类型的时间对象,这时JSONObject默认会将Date属性转换成这样的格式:
{"nanos":0,"time":-27076233600000,"minutes":0,"seconds":0,"hours":0,"month":11,"timezoneOffset":-480,"year":-789,"day":5,"date":22}
而这种格式肯定是非常难以理解的,为了将Date转换为我们认识的“yyyy-MM-dd”格式,需要做以下操作。
首先创建一个时间转换器:
publicclassJsonDateValueProcessorimplementsJsonValueProcessor{
privateStringformat="yyyy-MM-dd";
publicJsonDateValueProcessor(){
super();
}
publicJsonDateValueProcessor(Stringformat){
super();
this.format=format;
}
@Override
publicObjectprocessArrayValue(ObjectparamObject,
JsonConfigparamJsonConfig){
returnprocess(paramObject);
}
@Override
publicObjectprocessObjectValue(StringparamString,ObjectparamObject,
JsonConfigparamJsonConfig){
returnprocess(paramObject);
}
privateObjectprocess(Objectvalue){
if(valueinstanceofDate){
SimpleDateFormatsdf=newSimpleDateFormat(format,Locale.CHINA);
returnsdf.format(value);
}
returnvalue==null?"":value.toString();
}
}
然后在调用JSONObject之前创建一个JsonConfig,并且将上一步定义的date转换器注册进去:
JsonConfigjsonConfig=newJsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class,newJsonDateValueProcessor());
最后将JsonConfig放入JSONObject对象中,这里针对不同的数据类型有多种方式放入JsonConfig:
JSONObjectjson=newJSONObject();
//JavaBean转JSON
json.fromObject(object,jsonConfig)
最后我们看到的结果就是只要JavaBean中有Date对象,转换成JSON字符串时就会变成“yyyy-MM-dd”格式