在項(xiàng)目中遇到了這個(gè)問題:用JSONObject插件將JavaBean或List轉(zhuǎn)換為JSON格式的字符串,而JavaBean的屬性有時(shí)候會(huì)有java.util.Date這個(gè)類型的時(shí)間對(duì)象时鸵,這時(shí)JSONObject默認(rèn)會(huì)將Date屬性轉(zhuǎn)換成這樣的格式:
{"nanos":0,"time":-27076233600000,"minutes":0,"seconds":0,"hours":0,"month":11,"timezoneOffset":-480,"year":-789,"day":5,"date":22}
而這種格式肯定是非常難以理解的,為了將Date轉(zhuǎn)換為我們認(rèn)識(shí)的“yyyy-MM-dd”格式软能,需要做以下操作。
首先創(chuàng)建一個(gè)時(shí)間轉(zhuǎn)換器:
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();
}
}
然后在調(diào)用JSONObject之前創(chuàng)建一個(gè)JsonConfig举畸,并且將上一步定義的date轉(zhuǎn)換器注冊(cè)進(jìn)去:
JsonConfigjsonConfig=newJsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class,newJsonDateValueProcessor());
最后將JsonConfig放入JSONObject對(duì)象中查排,這里針對(duì)不同的數(shù)據(jù)類型有多種方式放入JsonConfig:
JSONObjectjson=newJSONObject();
//JavaBean轉(zhuǎn)JSON
json.fromObject(object,jsonConfig)
最后我們看到的結(jié)果就是只要JavaBean中有Date對(duì)象,轉(zhuǎn)換成JSON字符串時(shí)就會(huì)變成“yyyy-MM-dd”格式