JavaBean和json数据之间的转换含有date类型的JavaBean
Posted litterCoder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaBean和json数据之间的转换含有date类型的JavaBean相关的知识,希望对你有一定的参考价值。
1.前言
上次讲了简单的JavaBean和json格式之间的转换,代码很简单,但是实际过程中,往往用到的JavaBean都是比较复杂的,其他的字段还好,如果JavaBean中包含了date类型的字段,就会比较麻烦,今天我们久就来讲一下,date类型的字段该如何操作。
2.含有date类型的JavaBean和json之间的转换
1)首先,我们写一个含有date类型的JavaBean
1 public class Student { 2 private String name; 3 private Integer age; 4 private Date birthday; 5 }
2)然后,我们对其进行转换
1 public static void main(String[] arg){ 2 Student student = new Student(); 3 student.setName("litterCoder"); 4 student.setAge(22); 5 student.setBirthday(new Date()); 6 JSONObject jsonObject = JSONObject.fromObject(student); 7 System.out.println(jsonObject); 8 }
3)再将json数据转换回去,进行输出
1 public static void main(String[] arg){ 2 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\\"}"; 3 JSONObject jsonObject = JSONObject.fromObject(json); 4 Student student = (Student) JSONObject.toBean(jsonObject, Student.class); 5 System.out.println(student); 6 }
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 首先我们需要一个时间转化器,在里面定义好你所需要的格式
1 import net.sf.json.JsonConfig; 2 import net.sf.json.processors.JsonValueProcessor; 3 4 import java.text.SimpleDateFormat; 5 import java.util.Date; 6 import java.util.Locale; 7 8 9 public class JsonDateValueProcessor implements JsonValueProcessor { 10 11 /** 12 * datePattern 13 */ 14 private String datePattern = "yyyy-MM-dd HH:mm:ss"; 15 16 public JsonDateValueProcessor() { 17 super(); 18 } 19 20 public JsonDateValueProcessor(String format) { 21 super(); 22 this.datePattern = format; 23 } 24 25 @Override 26 public Object processArrayValue(Object value, JsonConfig jsonConfig) { 27 return process(value); 28 } 29 30 @Override 31 public Object processObjectValue(String key, Object value, 32 JsonConfig jsonConfig) { 33 return process(value); 34 } 35 36 /** 37 * process 38 * @param value Object 39 * @return Object 40 */ 41 private Object process(Object value) { 42 try { 43 if (value instanceof Date) { 44 SimpleDateFormat sdf = new SimpleDateFormat(datePattern, 45 Locale.UK); 46 return sdf.format((Date) value); 47 } 48 return value == null ? "" : value.toString(); 49 } catch (Exception e) { 50 return ""; 51 } 52 53 } 54 55 public String getDatePattern() { 56 return datePattern; 57 } 58 59 public void setDatePattern(String pDatePattern) { 60 datePattern = pDatePattern; 61 } 62 }
1.2 转换成json格式
1 public static void main(String[] arg){ 2 Student student = new Student(); 3 student.setName("litterCoder"); 4 student.setAge(22); 5 student.setBirthday(new Date()); 6 JsonConfig config = new JsonConfig(); 7 config.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor()); 8 JSONObject jsonObject = JSONObject.fromObject(student,config); 9 System.out.println(jsonObject); 10 }
首先,我们构造一个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的主要内容,如果未能解决你的问题,请参考以下文章
IDEA使用GsonFormat完成JSON和JavaBean之间的转换
FastJson JSON对象及JavaBean之间的相互转换
FastJson学习:JSON格式字符串JSON对象及JavaBean之间的相互转换
SpringMVC表单或Json中日期字符串与JavaBean的Date类型的转换