Java將Date日期類型字段轉(zhuǎn)換成json字符串的方法
想必我們?cè)谧鲰?xiàng)目的時(shí)候,都會(huì)遇到服務(wù)端與客戶端交互數(shù)據(jù)。一般情況下我們都會(huì)采用json格式或者xml格式,將服務(wù)端的數(shù)據(jù)轉(zhuǎn)換成這兩種格式之一。
但是,如果我們將數(shù)據(jù)轉(zhuǎn)換成json格式的時(shí)候,我們也許會(huì)遇到Date日期型的數(shù)據(jù)轉(zhuǎn)換成json格式后,并不是我們想要的格式。下面我們通過簡(jiǎn)單的demo
來說明這個(gè)問題。
我們按照一般json格式生成,會(huì)出現(xiàn)以下問題:
采用json:將數(shù)據(jù)生成json格式,需要導(dǎo)入相應(yīng)的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) {
/**
* 創(chuàng)建三個(gè)student對(duì)象,并將對(duì)象添加到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集合眾的數(shù)據(jù)轉(zhuǎn)換成json格式的字符串形式*/
JSONArray array = new JSONArray();
array = array.fromObject(list);
System.out.println(array.toString());
運(yùn)行Java應(yīng)用程序,看見在控制臺(tái)是哪個(gè)打印出了:(這里通過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字段是日期型的,并不是我們一般情況下需要的。這時(shí)候,我們就必須寫一個(gè)工具類進(jìn)行處理了。
但遇到Date類型的數(shù)據(jù)的時(shí)候,就需要進(jìn)行處理。
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對(duì)象的格式化,以及數(shù)值的格式化,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();
}
}
除了自定義日期格式外,還可以如法炮制,控制數(shù)值格式化、HTML內(nèi)容轉(zhuǎn)碼等。
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) {
/**
* 創(chuàng)建三個(gè)student對(duì)象,并將對(duì)象添加到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集合眾的數(shù)據(jù)轉(zhuǎn)換成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());
}
}
運(yùn)行Java應(yīng)用程序,會(huì)得到我們期望的json格式:
[
{
"birthday": "2015-12-03",
"username": "張三"
},
{
"birthday": "2015-12-03",
"username": "李四"
},
{
"birthday": "2015-12-03",
"username": "王五"
}
]
很顯然這種日期格式,是我們經(jīng)常使用的。也方便在客戶端解析這種格式的json字符串。
總結(jié)
到此這篇關(guān)于Java將Date日期類型字段轉(zhuǎn)換成json字符串的文章就介紹到這了,更多相關(guān)Java Date日期類型字段轉(zhuǎn)json字符串內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
@DS注解的使用,動(dòng)態(tài)數(shù)據(jù)源,事務(wù)詳解
在項(xiàng)目中使用多數(shù)據(jù)源時(shí),可以借助苞米豆的dynamic-datasource-spring-boot-starter進(jìn)行配置,首先需引入相應(yīng)的jar包,并在application.yml中設(shè)置主從數(shù)據(jù)源,其中一般選擇master作為默認(rèn)數(shù)據(jù)源,在實(shí)現(xiàn)類中通過@DS注解指定數(shù)據(jù)源2024-09-09
淺談java運(yùn)用注解實(shí)現(xiàn)對(duì)類中的方法檢測(cè)的工具
這篇文章主要介紹了淺談java運(yùn)用注解實(shí)現(xiàn)對(duì)類中的方法檢測(cè)的工具,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
Java 和 JavaScript 真正通用的Base64編碼詳解
這篇文章主要介紹了Java 和 JavaScript 真正通用的Base64編碼詳解的相關(guān)資料,附有Java和Javascript 的Base64編碼,需要的朋友可以參考下2016-11-11
Java?深入理解創(chuàng)建型設(shè)計(jì)模式之建造者模式
建造者(Builder)模式和工廠模式的關(guān)注點(diǎn)不同:建造者模式注重零部件的組裝過程,而工廠方法模式更注重零部件的創(chuàng)建過程,但兩者可以結(jié)合使用2022-02-02
springboot如何實(shí)現(xiàn)異步響應(yīng)請(qǐng)求(前端請(qǐng)求超時(shí)的問題解決)
這篇文章主要給大家介紹了關(guān)于springboot如何實(shí)現(xiàn)異步響應(yīng)請(qǐng)求(前端請(qǐng)求超時(shí)的問題解決)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用springboot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-01-01
Springboot+Vue+axios實(shí)現(xiàn)文章收藏功能

