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中的字符串為空時,程序會報錯,這個我們就下一篇再討論了

 

 

    

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM