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 = '{ ...
随机推荐
- 18 SQL优化
1.SQL语句优化的一般步骤 1).了解各种SQL的执行频率 客户端连接成功后,可以通过SHOW [SESSION | GLOBAL] STATUS 命令来查看服务器状态信 ...
- vue 线上,本地,不同变量配置
线上的接口和本地的接口不一样,每次打包的时候要手动更改很麻烦.自动让他配置 1.修改package.json --mode line 传参数line给配置项,编译buildline的时候,就能把li ...
- 第1节 IMPALA:4、5、linux磁盘的挂载和上传压缩包并解压
第二步:开机之后进行磁盘挂载 分区,格式化,挂载新磁盘 磁盘挂载 df -lh fdisk -l 开始分区 fdisk /dev/sdb 这个命令执行后依次输 n p 1 回车 回车 w ...
- 第3节 sqoop:2、sqoop的基本简介和安装
3. sqoop数据迁移 3.1.概述 sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具. 导入数据:MySQL,Oracle导入数据到Hadoop的HDFS.HI ...
- C++面试常见问题——10派生类的构造与析构
派生类的构造与析构 派生类的构造 派生时构造函数与析构函数不会被继承,需要重新定义派生类的构造函数与析构函数.派生类对象包含了基类对象的值,创建派生类时首先会调用基类的构造函数,若派生类中含有其它类对 ...
- js - 获取当前年月日
var date = new Date(); date .getYear(); //获取当前年份(2位) date .getFullYear(); //获取完整的年份(4位) date .getMon ...
- jvm问题汇总
1.软引用.弱引用.虚引用-他们的特点及应用场景?
- 040、Java中逻辑运算之短路与运算“&&”
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- CSS样式表——格式与选择器
1.分类 1)内联(写在标签内部) style="样式" 控制精确,代码重用性差 2)内嵌(在<head></head>中) <style type= ...
- P1001 害死人不偿命的(3n+1)猜想 (Basic Level)
转跳点: