这几天的项目开发过程中遇到一个比较棘手的问题,主要是通用导出类中,使用了一个javabean转换成json字符串的问题,javabean中一个日期格式是“yyyy-MM-dd”,转成json以后的格式,变成了updatetime={day=24,year=2012...} 样子的。
我们可以看出JSONObject net.sf.json.JSONObject.fromObject(Object object, JsonConfig jsonConfig)还接受一个JsonConfig对象,那么我们就应该从这里入手。
1、写一个value处理类(UtilDateProcessor .java)
package cn.qazit.common.utils;
import java.text.SimpleDateFormat; import java.util.Date;
import java.util.Locale;
import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValueProcessor;
public class UtilDateProcessor implements JsonValueProcessor {
/** * /** * 字母 日期或时间元素 表示 示例 <br> * G Era 标志符 Text AD <br> * y 年 Year 1996; 96 <br> * M 年中的月份 Month July; Jul; 07 <br> * w 年中的周数 Number 27 <br> * W 月份中的周数 Number 2 <br> * D 年中的天数 Number 189 <br> * d 月份中的天数 Number 10 <br> * F 月份中的星期 Number 2 <br> * E 星期中的天数 Text Tuesday; Tue<br> * a Am/pm 标记 Text PM <br> * H 一天中的小时数(0-23) Number 0 <br> * k 一天中的小时数(1-24) Number 24<br> * K am/pm 中的小时数(0-11) Number 0 <br> * h am/pm 中的小时数(1-12) Number 12 <br> * m 小时中的分钟数 Number 30 <br> * s 分钟中的秒数 Number 55 <br> * S 毫秒数 Number 978 <br> * z 时区 General time zone Pacific Standard Time; PST; GMT-08:00 <br> * Z 时区 RFC 822 time zone -0800 <br> */ private String format = "yyyy-MM-dd "; //自定义时间格式化的样式 public UtilDateProcessor() { super(); // TODO Auto-generated constructor stub } public UtilDateProcessor(String format) { this.format = format; } @Override public Object processArrayValue(Object arg0, JsonConfig arg1) { String[] obj = {}; if (arg0 instanceof Date[]) { SimpleDateFormat sf = new SimpleDateFormat(format); Date[] dates = (Date[]) arg0; obj = new String[dates.length]; for (int i = 0; i < dates.length; i++) { obj[i] = sf.format(dates[i]); } } return obj; }
@Override public Object processObjectValue(String arg0, Object arg1, JsonConfig arg2) { return process(arg1); } private Object process(Object value) { try { if (value instanceof Date) { SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.UK); return sdf.format((Date) value); } return value == null ? "" : value.toString(); } catch (Exception e) { return ""; }
}
public String getFormat() { return format; }
public void setFormat(String format) { this.format = format; } }
2、在实例类中,加上以下代码
JsonConfig jsonConfig = new JsonConfig(); jsonConfig.registerJsonValueProcessor(java.sql.Timestamp.class,new UtilDateProcessor("yyyy-MM-dd")); JSONObject jsonObject = JSONObject.fromObject(src, jsonConfig);
打印如下输出:
[{QHSHI=重庆市, JCBGRQ=2016-12-22 00:00:00.0 .....}]