热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

将Date日期类型的字段转换成json字符串

原标题:将Date日期类型的字段转换成json字符串想必我们在做项目的时候,都会遇到服务端与客户端交互数据。一般情况下我们都会采用json格式或者xml格式,将服务端的数据转换成这

原标题:将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 list = new ArrayList();
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格式化工具处理后了,方便大家阅读)

[
{
"biwww.yii666.comrthday": {
"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
},
文章来源地址37851.html "username": "李四"
},
{
"birthday": {
"date": 3,
"day": 4,
"hours": 9,
"m文章来源站点https://www.yii666.com/inutes": 5,
"month": 11,
"seconds": 1,
"time": 1449104701018,
"timezoneOffset"www.yii666.com: -480,
"year": 115
},
"username": "王五"
}
]

虽然符合json语法格式,但是里面的birthday字段是日期型的,并不是我们一般情况下需要的。这时候,我们就必须写一个工具类进行处理了。

但遇到Date类型的数据的时候,就需要进行处理。

JsonDateValueProcessor.java

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 list = new ArrayList();
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(lis文章来源地址37851.htmlt,config);
System.out.println(array.toString());
}
}
运行Java应用程序,会得到我们期望的json格式:

[
{
"birthday": "2015-12-03",
"username": "张三"
},
{
"birthday": "2015-12-03",
"username": "李四"
},
{
"birthday": "2015-12-03",
"username": "王五"
}
]

很显然这种日期格式,是我们经常使用的。也方便在客户端解析这种格式的json字符串。

有什么不足之处,请各位博主指教。

来源于:将Date日期类型的字段转换成json字符串


推荐阅读
author-avatar
道貌岸然小皇猪_497_603
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有