以前比较少json特殊处理,都是需要什么组装什么,现在需要从bean转换成目标格式。
比如Timestamp,使用net.sf.json.JSONObject的话,就会往Timestamp里面的getter setter进行序列化,事实上我们只需要把他组成简单的时间字段而已。
JSONObject net.sf.json.JSONObject.fromObject(Object object, JsonConfig jsonConfig)
这个方法一直放在那里没有用,这回应该能派上用场
编写对时间类型的转换
public class JSONTimeStampProcessor implements JsonValueProcessor {
/* (non-Javadoc)
* @see net.sf.json.processors.JsonValueProcessor#processArrayValue(java.lang.Object, net.sf.json.JsonConfig)
*/
@Override
public Object processArrayValue(Object obj, JsonConfig jsonconfig) {
// TODO Auto-generated method stub
return obj;
}
/* 单个值的转换(non-Javadoc)
* @see net.sf.json.processors.JsonValueProcessor#processObjectValue(java.lang.String, java.lang.Object, net.sf.json.JsonConfig)
*/
@Override
public Object processObjectValue(String s, Object obj, JsonConfig jsonconfig) {
// TODO Auto-generated method stub
if (obj instanceof Timestamp) {
try {
Timestamp timeStamp = (Timestamp) obj;
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String rtnType = sdf.format(timeStamp);
return rtnType;
} catch (Exception e) {
}
}
return obj;
}
}
注册processor并且序列化bean
JsonConfig jsonConfig=new JsonConfig();
JSONTimeStampProcessor timeStamp=new JSONTimeStampProcessor();
jsonConfig.registerJsonValueProcessor(Timestamp.class, timeStamp);
return JSONObject.fromObject(bean, jsonConfig).toString();