今天项目中遇到一个问题,如下图所示。
遇到了该集合对象中有多个Date类型的字段,我又不想麻烦的将所有Date转成String类型,再生成JSON,认真研究了一下,在网上找到了解决方法。
使用net.sf.json.JSONObject进行转换,pom.xml文件中引入依赖的jar包:
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
创建一个工具类JsonDateValueProcessor,实现了JsonValueProcessor接口:
package com.zcjy.os.common.util;
import java.text.SimpleDateFormat;
import java.util.Date;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
/**
* date与json互转工具类
* @author xhz
*
*/
public class JsonDateValueProcessor implements JsonValueProcessor{
private String datePattern = "yyyy-MM-dd HH:mm:ss";//默认样式,可以在构造方法中修改
public JsonDateValueProcessor() {
super();
}
public JsonDateValueProcessor(String datePattern) {
super();
this.datePattern = datePattern;
}
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
try {
if(value instanceof Date){
SimpleDateFormat sdf = new SimpleDateFormat(datePattern);
Date date = (Date)value;
return sdf.format(date);
}
return value == null ? null : value.toString();
} catch (Exception e) {
return null;
}
}
public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
return processArrayValue(value, jsonConfig);
}
public String getDatePattern() {
return datePattern;
}
public void setDatePattern(String datePattern) {
this.datePattern = datePattern;
}
}
需要使用JSONConfig对象,对传入的数据,进行处理:
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
JSONObject jsonObject = JSONObject.fromObject(case1,jsonConfig);
如果传入的为集合则需要将JSONObject 换为JSONArray
List<QueryMsgReceive> queryLetterList=msgReceiveService.queryMsgReceiveByInbox(msgReceive, page);// 查询站内信收件箱
JSONObject object = new JSONObject();
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
JSONArray jo = JSONArray.fromObject(queryLetterList,jsonConfig);
object.put("queryLetterList", jo.toString());
转化后的数据格式如下所示:
{
"addTime": "2019-03-08 16:44:12",
"content": "管理员给您赠送了【<a class=\"course-title c-333\" target=\"_blank\" href=\"http://www.i-ronge.com/front/couinfo/276\">资本市场<\/a>】快去学习吧!",
"cusId": 0,
"cusName": "",
"friNum": 0,
"groupId": 0,
"groupName": "",
"groupNum": 0,
"id": 36248,
"letterNum": 0,
"receivingCusId": 23289,
"remarks": "",
"showname": "疯狂小石头一号",
"status": 1,
"systemNum": 0,
"type": 1,
"unReadNum": 0,
"updateTime": "2019-03-08 16:44:12",
"userExpandDto": null
}