1.前言

  上次讲了简单的JavaBean和json格式之间的转换,代码很简单,但是实际过程中,往往用到的JavaBean都是比较复杂的,其他的字段还好,如果JavaBean中包含了date类型的字段,就会比较麻烦,今天我们久就来讲一下,date类型的字段该如何操作。

2.含有date类型的JavaBean和json之间的转换

  1)首先,我们写一个含有date类型的JavaBean

 public class Student {
private String name;
private Integer age;
private Date birthday;
}

  2)然后,我们对其进行转换

     public static void main(String[] arg){
Student student = new Student();
student.setName("litterCoder");
student.setAge(22);
student.setBirthday(new Date());
JSONObject jsonObject = JSONObject.fromObject(student);
System.out.println(jsonObject);
}

  3)再将json数据转换回去,进行输出

     public static void main(String[] arg){
String json = "{\"age\":22,\"birthday\":{\"date\":11,\"day\":1,\"hours\":11,\"minutes\":3,\"month\":1,\"seconds\":46,\"time\":1549854226674,\"timezoneOffset\":-480,\"year\":119},\"name\":\"litterCoder\"}";
JSONObject jsonObject = JSONObject.fromObject(json);
Student student = (Student) JSONObject.toBean(jsonObject, Student.class);
System.out.println(student);
}

  4)通过输出的结果,我们可以观察到,虽然转换成功了,但是里面还是存在两个问题。

    第一个问题就是转换成json时的date类型的字段"birthday":{"date":11,"day":1,"hours":11,"minutes":3,"month":1,"seconds":46,"time":1549854226674,"timezoneOffset":-480,"year":119}, 这一大串显然不太容易看懂,我们最好将他转换成能够通俗易懂的格式,例如“birthday”:{“2019.2.11 11:03:46”}。

    第二个问题就是json转换成JavaBean的时候,报了两个警告,虽然不会影响运行,但是如果我们要根据日志查看某些错误或者某些信息的时候,就会造成影响,所以最好是能够去掉

    

3.解决问题

  1)JavaBean转换成json字段时,date类型字段指定格式

    1.1 首先我们需要一个时间转化器,在里面定义好你所需要的格式

      

 import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor; import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale; public class JsonDateValueProcessor implements JsonValueProcessor { /**
* datePattern
*/
private String datePattern = "yyyy-MM-dd HH:mm:ss"; public JsonDateValueProcessor() {
super();
} public JsonDateValueProcessor(String format) {
super();
this.datePattern = format;
} @Override
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
return process(value);
} @Override
public Object processObjectValue(String key, Object value,
JsonConfig jsonConfig) {
return process(value);
} /**
* process
* @param value Object
* @return Object
*/
private Object process(Object value) {
try {
if (value instanceof Date) {
SimpleDateFormat sdf = new SimpleDateFormat(datePattern,
Locale.UK);
return sdf.format((Date) value);
}
return value == null ? "" : value.toString();
} catch (Exception e) {
return "";
} } public String getDatePattern() {
return datePattern;
} public void setDatePattern(String pDatePattern) {
datePattern = pDatePattern;
}
}

      1.2 转换成json格式

     public static void main(String[] arg){
Student student = new Student();
student.setName("litterCoder");
student.setAge(22);
student.setBirthday(new Date());
JsonConfig config = new JsonConfig();
config.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
JSONObject jsonObject = JSONObject.fromObject(student,config);
System.out.println(jsonObject);
}

        首先,我们构造一个JsonConfig,然后调用它的registerJsonValueProcessor方法,将刚刚写的转换器设置进去,最后调用JSONObject的fromObject的时候,将config设置进去,我们可以看到结果,时间显示的很清晰明了

        

      1.3 json转换成对象

 public static void main(String[] arg){
String json = "{\"age\":22,\"birthday\":\"2019-02-11 11:13:05\",\"name\":\"litterCoder\"}";
//日期转化格式
String[] dateFormats = new String[] {"yyyy-MM-dd HH:mm:ss"};
JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFormats));
JSONObject jsonObject = JSONObject.fromObject(json);
Student student = (Student) JSONObject.toBean(jsonObject, Student.class);
System.out.println(student);
}

       这里需要将之前的时间转换器内的时间格式设置进来,用于将时间重新转换回来,可以看到日志中没有了那两个警告

3.总结

  这就是含有date类型的JavaBean和json字符串之间的转换,不过其中还存在一点小问题,就是当JavaBean中的字符串为空时,程序会报错,这个我们就下一篇再讨论了

    

    

JavaBean和json数据之间的转换(二)含有date类型的JavaBean的更多相关文章

  1. JavaBean和json数据之间的转换(一)简单的JavaBean转换

    1.为什么要使用json? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,因为其高性能.可读性强的原因,成为了现阶段web开发中前后端交互数据的主要数据 ...

  2. <摘录>Gson对Java嵌套对象和JSON字符串之间的转换

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,具有良好的跨平台特性.近几年来已经和XML一样成为C/S架构中广泛采用的数据格式.有关JSON的更多知识, ...

  3. json对象和json字符串之间的转换-JavaScript实现

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  4. 使用Google的Gson实现对象和json字符串之间的转换

    使用Google的Gson实现对象和json字符串之间的转换 需要gson.jar 1.JsonUtil.java package com.snail.json; import java.lang.r ...

  5. C#字符串和数据之间的转换

    c#中不仅仅存在数值类型的数据之间的转换,字符串和数值之间也是可以互相转换的,只是方法不同而已. 1 数值型转换为字符型 数值型数据转换为字符串用ToString()方法即可实现 int num1=1 ...

  6. 更新操作 关于json字符串的拼接、json字符串与json对象之间的转换

    更新操作  后台 /** * 更新人员 * @return "updateSdr" */ public String updateTheSdr(){ jsonstr = " ...

  7. Java集合 Json集合之间的转换

    1. Java集合转换成Json集合 关键类:JSONArray jsonArray = JSONArray.fromObject(Object obj); 使用说明:将Java集合对象直接传进JSO ...

  8. java处理json的工具类(list,map和json的之间的转换)

    需要下载第三方的jar :net.sf.json import java.io.BufferedReader; import java.io.InputStream; import java.io.I ...

  9. json文本和json对象之间的转换

    在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键.例如: //JSON字符串: var str1 = '{ ...

随机推荐

  1. RNN、LSTM、Seq2Seq、Attention、Teacher forcing、Skip thought模型总结

    RNN RNN的发源: 单层的神经网络(只有一个细胞,f(wx+b),只有输入,没有输出和hidden state) 多个神经细胞(增加细胞个数和hidden state,hidden是f(wx+b) ...

  2. vim的几种模式&快捷键

    vim的几种模式&快捷键 2017年01月01日 14:05:24 阅读数:3060 一.vim的模式 基本上vim可以分为三种模式:命令模式,插入模式和底行模式,其实vim有多种模式,我们只 ...

  3. docker-compose 快速部署Prometheus,监控docker 容器, 宿主机,ceph -- cluster集群

    话不多说上菜: 现在环境是这样: ceph 4台: 192.168.100.21  ceph-node1 192.168.100.22  ceph-node2 192.168.100.23  ceph ...

  4. C++Review15_内存管理

    一.野指针 定义指针变量时最好初始化为NULL: 内存回收后,指针也用完了,这时候也需要及时将指针置为NULL: 指针就像野狗一样,为了防止它乱指,除了在使用期间,别的时候都需要置为NULL.这样它就 ...

  5. L2-012. 关于堆的判断(最小堆)

    将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: “x is the root”:x是根结点: “x and y are siblings”:x和y ...

  6. ETC系列产品非接触式读卡器方案:SI522

    随着科技的不断发展,出行上高速这是非常寻常的事.但是在很多节假日高峰时期,在高速路口塞车缴费给很多车主造成很大的烦心.为了解决这一系列的问题,科技发明了ETC这种便捷式缴费技术,让车主们顺畅通过高速路 ...

  7. Kubernetes——命令行操作

    如果集群初始化失败需要的操作: master:  kubeadm reset   #回答y  执行一条它提示给你的iptables命令即可 node:  systemctl stop kubelet  ...

  8. 基于线程池、消息队列和epoll模型实现并发服务器架构

    引言 并发是什么?企业在进行产品开发过程中为什么需要考虑这个问题?想象一下天猫的双11和京东的618活动,一秒的点击量就有几十万甚至上百万,这么多请求一下子涌入到服务器,服务器需要对这么多的请求逐个进 ...

  9. 009.Delphi插件之QPlugins,服务的热插拔

    这个DEMO用来演示服务的替换,用起来总是怪怪的感觉,效果图如下 代码如下 unit Frm_Main; interface uses Winapi.Windows, Winapi.Messages, ...

  10. 创建一个TCP代理

    代理技术 代理一般被我们用于"穿墙",具体来说可以看这里,或者查wiki.理解代理背后的原理之后,便很容易知道,代理的作用不仅仅只是"穿墙".例如我们可以把经过 ...