我们经常使用 JSONArray array=JSONArray.fromObject() 将对象集合 List 转换成jsp所需的 JSONArray 形式
但是当处理到的 List 中包含 Date 类型的数据时,会出现错误。
此时,我们应该怎么解决这个问题。
JSON-lib is a java library for transforming beans, maps, collections, java arrays and XML to JSON and back again to beans and DynaBeans.
某些时候,我们需要对对象转为字符串的过程加以控制,最常见需求如数值格式化和日期格式化。
JSON lib提供了JsonConfig对象,该对象能够深刻影响Java对象转成json字符串的行为。
我们要控制JSON序列化过程中的Date对象的格式化,以及数值的格式化,JsonValueProcessor是最好的选择。
首先,我们应定义一个日期处理类:
import java.text.SimpleDateFormat;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
/**
* json-lib 日期处理类
* @author Administrator
*
*/
public class DateJsonValueProcessor implements JsonValueProcessor{
private String format;
public DateJsonValueProcessor(String format){
this.format = format;
}
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
// TODO Auto-generated method stub
return null;
}
public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
if(value == null)
{
return "";
}
if(value instanceof java.sql.Timestamp)
{
String str = new SimpleDateFormat(format).format((java.sql.Timestamp)value);
return str;
}
if (value instanceof java.util.Date)
{
String str = new SimpleDateFormat(format).format((java.util.Date) value);
return str;
}
return value.toString();
}
}
然后在Controller中重新注册json配置对象:
JsonConfig jsonConfig=new JsonConfig();
jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor("yyyy-MM-dd HH-mm"));
最后在使用JSONArray的时候使用重载函数:
JSONArray array=JSONArray.fromObject(List,jsonConfig);
JSONObject jsonObjecg=JSONObject.from(Object,jsonConfig); 注意在转换的时候就要使用jsonConfig
这就是json处理date类型数据的一个解决方法