Java将Date日期类型字段转换成json字符串的方法
作者:上善若水 发布时间:2023-02-18 19:57:09
标签:date,转换,json
想必我们在做项目的时候,都会遇到服务端与客户端交互数据。一般情况下我们都会采用json格式或者xml格式,将服务端的数据转换成这两种格式之一。
但是,如果我们将数据转换成json格式的时候,我们也许会遇到Date日期型的数据转换成json格式后,并不是我们想要的格式。下面我们通过简单的demo
来说明这个问题。
我们按照一般json格式生成,会出现以下问题:
采用json:将数据生成json格式,需要导入相应的jar包,如下图:
Student.java
package com.xbmu.bean;
import java.io.Serializable;
import java.util.Date;
public class Student implements Serializable {
private String username;
private Date birthday;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String username, Date birthday) {
super();
this.username = username;
this.birthday = birthday;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "Student [username=" + username + ", birthday=" + birthday + "]";
}
}
TestDateValueToJson.java
package com.xbmu.test;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import net.sf.json.JSONArray;
import com.xbmu.bean.Student;
public class TestDateValueToJson {
public static void main(String[] args) {
/**
* 创建三个student对象,并将对象添加到List集合中
*
* */
List<Student> list = new ArrayList<Student>();
Student student = new Student("张三", new Date());
list.add(student);
student = new Student("李四",new Date());
list.add(student);
student = new Student("王五",new Date());
list.add(student);
/**将list集合众的数据转换成json格式的字符串形式*/
JSONArray array = new JSONArray();
array = array.fromObject(list);
System.out.println(array.toString());
运行Java应用程序,看见在控制台是哪个打印出了:(这里通过json格式化工具处理后了,方便大家阅读)
[
{
"birthday": {
"date": 3,
"day": 4,
"hours": 9,
"minutes": 5,
"month": 11,
"seconds": 1,
"time": 1449104701018,
"timezoneOffset": -480,
"year": 115
},
"username": "张三"
},
{
"birthday": {
"date": 3,
"day": 4,
"hours": 9,
"minutes": 5,
"month": 11,
"seconds": 1,
"time": 1449104701018,
"timezoneOffset": -480,
"year": 115
},
"username": "李四"
},
{
"birthday": {
"date": 3,
"day": 4,
"hours": 9,
"minutes": 5,
"month": 11,
"seconds": 1,
"time": 1449104701018,
"timezoneOffset": -480,
"year": 115
},
"username": "王五"
}
]
虽然符合json语法格式,但是里面的birthday字段是日期型的,并不是我们一般情况下需要的。这时候,我们就必须写一个工具类进行处理了。
但遇到Date类型的数据的时候,就需要进行处理。
package com.xbmu.utils;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
/**
* 自定义JsonValueProcessor
* 比如我们要控制JSON序列化过程中的Date对象的格式化,以及数值的格式化,JsonValueProcessor是最好的选择。
* @author bitaotao
*
*/
public class JsonDateValueProcessor implements JsonValueProcessor {
private String pattern = "yyyy-MM-dd";
public Object processArrayValue(Object value, JsonConfig config) {
return process(value);
}
public Object processObjectValue(String key, Object value, JsonConfig config) {
return process(value);
}
private Object process(Object value){
if(value instanceof Date){
SimpleDateFormat sdf = new SimpleDateFormat(pattern, Locale.UK);
return sdf.format(value);
}
return value == null ? "" : value.toString();
}
}
除了自定义日期格式外,还可以如法炮制,控制数值格式化、HTML内容转码等。
TestDateValueToJson.java
package com.xbmu.test;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import net.sf.json.JSONArray;
import net.sf.json.JsonConfig;
import com.xbmu.bean.Student;
import com.xbmu.utils.JsonDateValueProcessor;
public class TestDateValueToJson {
public static void main(String[] args) {
/**
* 创建三个student对象,并将对象添加到List集合中
*
* */
List<Student> list = new ArrayList<Student>();
Student student = new Student("张三", new Date());
list.add(student);
student = new Student("李四",new Date());
list.add(student);
student = new Student("王五",new Date());
list.add(student);
/**将list集合众的数据转换成json格式的字符串形式*/
JsonConfig config = new JsonConfig();
JsonDateValueProcessor jsonValueProcessor = new JsonDateValueProcessor();
config.registerJsonValueProcessor(Date.class, jsonValueProcessor);
JSONArray array = new JSONArray();
array = array.fromObject(list,config);
System.out.println(array.toString());
}
}
运行Java应用程序,会得到我们期望的json格式:
[
{
"birthday": "2015-12-03",
"username": "张三"
},
{
"birthday": "2015-12-03",
"username": "李四"
},
{
"birthday": "2015-12-03",
"username": "王五"
}
]
很显然这种日期格式,是我们经常使用的。也方便在客户端解析这种格式的json字符串。
来源:https://blog.csdn.net/btt2013/article/details/50155949


猜你喜欢
- 本文主要为大家分析了图书商城的用户模块,具体内容如下1、用户模块的相关类创建domain:Userdao:UserDaoservice:Us
- 本文实例为大家分享了基于C#实现网页爬虫的详细代码,供大家参考,具体内容如下HTTP请求工具类:功能:1、获取网页html2、下载网络图片u
- 有参数传递的地方都少不了参数校验。在web开发中,前端
- 本文为大家分享了C#实现图书管理系统课程设计,供大家参考,具体内容如下一、设计目的通过模拟图书管理系统,实现以下功能学生账号的注册学生对馆藏
- 题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。经典题,不多说,直接上代码import java.
- 简介说明本文介绍Spring如何控制Bean注入的顺序。首先需要说明的是:在Bean上加@Order(xxx)是无法控制bean注入的顺序的
- 使用线程池的好处1、降低资源消耗可以重复利用已创建的线程降低线程创建和销毁造成的消耗。2、提高响应速度当任务到达时,任务可以不需要等到线程创
- 本文为大家分享了如何使用eclipse创建java项目,供大家参考,具体内容如下首先,打开Eclipse,在工具栏依次点击【File】>
- 经常在代码中,需要使用 DEBUG 来输出一些奇怪的东西来进行测试。但是输出的窗口只有一个,如果有一个逗比在不停输出,那么就会让输出窗口看不
- unity贪吃蛇基本原理实现,供大家参考,具体内容如下原理:1、每个身体跟着前面的身体移动;2、蛇头自动一直向前走,可以向左或者向右转弯。思
- 最近用到需要无限轮播自动播放的轮播轮播图,网上感觉都有这样那样的问题,于是自己写了一个通用的控件CarouselFigureView。特点:
- 简介 Spring Cloud Ribbon 是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的。它
- 一、前言我们在做Winform窗体程序开发的时候,会经常遇到窗体之间相互传值。假设有下面的一个场景:一个主窗体和一个子窗体,点击主窗体上面的
- 前言以前我们还需要手写数据库设计文档、现在可以通过引入screw核心包来实现Java 数据库文档一键生成。话不多说、直接上代码演示。支持的数
- 引言在第一篇文章中我们分析了协程启动创建过程启动过程,在本文中,我们将着重剖析协程中协程调度的逻辑流程。主要是分析解答如下2个问题:涉及到协
- 概述Spring Cloud中,客户端的负载均衡使用的是Ribbon,Ribbon的超时时间默认很短,需要进行调整。Spring Cloud
- StringRedisTemplate与RedisTemplate区别点两者的关系是StringRedisTemplate继承RedisTe
- 包装类包装类其实就是8种基本数据类型对应的引用类型。基本数据类型引用数据类型byteByteshortShortintIntegerlong
- 概述在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说,程序的流程对运行结果有直接的影响。所以,我们必须清楚每条
- 一、支持的数据类型Flink 对可以在 DataSet 或 DataStream 中的元素类型进行了一些限制。这样做的原因是系统会分析类型以