Java將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字符串。

總結

到此這篇關於Java將Date日期類型字段轉換成json字符串的文章就介紹到這瞭,更多相關Java Date日期類型字段轉json字符串內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: