Java对象/集合中的Date类型如何成功转化为JSON?

今天项目中遇到一个问题,如下图所示。

遇到了该集合对象中有多个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
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值