JavaBean和json数据之间的转换(二)含有date类型的JavaBean
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的更多相关文章
- JavaBean和json数据之间的转换(一)简单的JavaBean转换
1.为什么要使用json? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,因为其高性能.可读性强的原因,成为了现阶段web开发中前后端交互数据的主要数据 ...
- <摘录>Gson对Java嵌套对象和JSON字符串之间的转换
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,具有良好的跨平台特性.近几年来已经和XML一样成为C/S架构中广泛采用的数据格式.有关JSON的更多知识, ...
- json对象和json字符串之间的转换-JavaScript实现
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- 使用Google的Gson实现对象和json字符串之间的转换
使用Google的Gson实现对象和json字符串之间的转换 需要gson.jar 1.JsonUtil.java package com.snail.json; import java.lang.r ...
- C#字符串和数据之间的转换
c#中不仅仅存在数值类型的数据之间的转换,字符串和数值之间也是可以互相转换的,只是方法不同而已. 1 数值型转换为字符型 数值型数据转换为字符串用ToString()方法即可实现 int num1=1 ...
- 更新操作 关于json字符串的拼接、json字符串与json对象之间的转换
更新操作 后台 /** * 更新人员 * @return "updateSdr" */ public String updateTheSdr(){ jsonstr = " ...
- Java集合 Json集合之间的转换
1. Java集合转换成Json集合 关键类:JSONArray jsonArray = JSONArray.fromObject(Object obj); 使用说明:将Java集合对象直接传进JSO ...
- java处理json的工具类(list,map和json的之间的转换)
需要下载第三方的jar :net.sf.json import java.io.BufferedReader; import java.io.InputStream; import java.io.I ...
- json文本和json对象之间的转换
在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键.例如: //JSON字符串: var str1 = '{ ...
随机推荐
- JuJu团队1月7号工作汇报
JuJu团队1月7号工作汇报 JuJu 周六周日放假,所以空了两天~ Scrum 团队成员 今日工作 剩余任务 困难 飞飞 完成data process readme部分 实现三维Dense 无 ...
- arm linux 移植 jpeg
背景: host平台 :Ubuntu 16.04 arm平台 : S5P6818 jpeg :v9c arm-gcc :4.8.1 主机准备: 运行以下脚本: ## # Copyright By Sc ...
- Oracle 的DBA考证
转自 :https://www.cnblogs.com/chunge2050/archive/2013/04/16/3023730.html 详细的了解了几天之后,总结起来就是oracle为DBA认证 ...
- XV6源代码阅读-同步机制
Exercise1 源代码阅读 锁部分:spinlock.h/spinlock.c以及相关其他文件代码 // Mutual exclusion lock. struct spinlock { uint ...
- 结题报告:luogu P2014
题目链接:P2014 选课 简单的树形\(dp\),借助\(dfs\)实现. 一般的树形\(dp\)数组是需要二维的,其中一维记录节点(编号或父/子节点的状态(有时三维)),另一维记录权值或计数. 重 ...
- java随记 2月16
1.a=a+b 等于 a+=b ,且a+=b隐含强制类型转换 2.^ 表示异或 两个二进制同号为假,异号为真 即 0^0=0,1^1=0,0^1=1 3.三元运算 布尔表达式 ?表达式 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):带有字体图标的导航栏
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 《ES6标准入门》(阮一峰)--4.字符串的扩展
1.字符的 Unicode 表示法 ES6 加强了对 Unicode 的支持,允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点. "\u0061" ...
- Window Server 2019 配置篇(5)- 在域中建立WSUS以实现自动更新
上次讲到我们的服务器群中增加了一台用于自动部署的服务器,这次我们要添加一台搭载WSUS服务的服务器,以实现对window更新的管理 那么WSUS是什么服务呢? WSUS是window server u ...
- VS2012 ffmpeg 没有定义的lrint
在common.h #ifndef AVUTIL_COMMON_H#define AVUTIL_COMMON_H下添加 #define lrint(f) (f>=0?(int32_t)(f+(d ...