评论

收藏

[Java] Java将Date日期类型字段转换成json字符串的方法

编程语言 编程语言 发布于:2021-09-12 14:57 | 阅读数:562 | 评论:0

这篇文章主要给大家介绍了关于Java将Date日期类型字段转换成json字符串的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
想必我们在做项目的时候,都会遇到服务端与客户端交互数据。一般情况下我们都会采用json格式或者xml格式,将服务端的数据转换成这两种格式之一。
但是,如果我们将数据转换成json格式的时候,我们也许会遇到Date日期型的数据转换成json格式后,并不是我们想要的格式。下面我们通过简单的demo
来说明这个问题。
我们按照一般json格式生成,会出现以下问题:
采用json:将数据生成json格式,需要导入相应的jar包,如下图:
DSC0000.png

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字符串内容请搜索CodeAE代码之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持CodeAE代码之家!
原文链接:https://blog.csdn.net/btt2013/article/details/50155949

关注下面的标签,发现更多相似文章