最近在使用EXT开发系统。在和数据库交互时用JSON。但是在读取日期字字段时总是无法正常的显示日期。把JSON转化成字符串后打印的结果如下:{"date":3,"day":4,"hours":6,"minutes":46,"month":4,"nanos":0,"seconds":25,"time":1235595000,"timezoneOffset":-480,"year":110} 。但是在EXT中要显示日期必须是“YYYY-MM-DD”格式。
  上网查找后发现有个Json-lib的JAR包。首先创建一个工具类JsonUtil,代码如下:
public class JsonUtil {
public static JsonConfig configJson(){   
    JsonConfig jcf = new JsonConfig();   
    jcf.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());   
    return jcf;   

}。接着创建一个如期转化类JsonValueProcessorImpl,代码如下:
public class JsonValueProcessorImpl implements JsonValueProcessor{ /**
 * 默认的格式
 */
private String format = "yyyy-MM-dd HH:mm:ss"; public JsonValueProcessorImpl() {
}; public JsonValueProcessorImpl(String format) {
this.format = format;
} /**
 * 格式化数组
 */
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
String[] obj = {};
if (value instanceof java.util.Date[]) {
SimpleDateFormat sf = new SimpleDateFormat(format);
java.util.Date[] dates = (java.util.Date[]) value;
obj = new String[dates.length];
for (int i = 0; i < dates.length; i++) {
obj[i] = sf.format(dates[i]);
}
}
if (value instanceof Timestamp[]) {
SimpleDateFormat sf = new SimpleDateFormat(format);
Timestamp[] dates = (Timestamp[]) value;
obj = new String[dates.length];
for (int i = 0; i < dates.length; i++) {
obj[i] = sf.format(dates[i]);
}
}
if (value instanceof java.sql.Date[]) {
SimpleDateFormat sf = new SimpleDateFormat(format);
java.sql.Date[] dates = (java.sql.Date[]) value;
obj = new String[dates.length];
for (int i = 0; i < dates.length; i++) {
obj[i] = sf.format(dates[i]);
}
}
return obj;
} /**
 * 格式化单一对象
 */
public Object processObjectValue(String key, Object value,
JsonConfig jsonConfig) {
if(Utils.isEmpty(value))
return "";
if (value instanceof Timestamp) {
String str = new SimpleDateFormat(format).format((Timestamp) value);
return str;
} else if (value instanceof java.util.Date) {
String str = new SimpleDateFormat(format).format((java.util.Date) value);
return str;
} else if (value instanceof java.sql.Date) {
String str = new SimpleDateFormat(format).format((java.sql.Date) value);
return str;
}
return value.toString();
} public String getFormat() {
return format;
} public void setFormat(String format) {
this.format = format;
}}下面的代码是使用上面两个类的代码
List list=iapu.getWorkscope(workscopeId);
JSONArray All_JSONArray=new JSONArray();
Map temp = (Map)list.get(0);
JsonConfig cfg = new JsonConfig();
cfg.registerJsonValueProcessor(java.sql.Timestamp.class, new JsonValueProcessorImpl("yyyy-mm-dd"));
cfg.registerJsonValueProcessor(java.util.Date.class, new JsonValueProcessorImpl("yyyy-mm-dd"));
cfg.registerJsonValueProcessor(java.sql.Date.class, new JsonValueProcessorImpl("yyyy-mm-dd"));
All_JSONArray.add(JSONObject.fromObject(temp, cfg));
Map rt_map=new HashMap();
rt_map.put("rows", All_JSONArray);
JSONObject json = JSONObject.fromObject(rt_map);最后可以正常的显示日期格式tbw。