Gson、FastJson、json-lib對比與實例

1、各個JSON技術的對比(本部分摘抄自http://www.cnblogs.com/kunpengit/p/4001680.html):html

1.json-lib
json-lib最開始的也是應用最普遍的json解析工具,json-lib 很差的地方確實是依賴於不少第三方包,
包括commons-beanutils-1.7.0.jar,commons-collections-3.2.jar,commons-lang-2.4.jar,commons-logging-1.1.jar,ezmorph-1.0.4.jar,jdom.jar,json-lib-2.2.2-jdk15.jar
對於複雜類型的轉換,json-lib對於json轉換成bean還有缺陷,好比一個類裏面會出現另外一個類的list或者map集合,json-lib從json到bean的轉換就會出現問題。
json-lib在功能和性能上面都不能知足如今互聯網化的需求。
2.開源的Jackson
相比json-lib框架,Jackson所依賴的jar包較少,簡單易用而且性能也要相對高些。
並且Jackson社區相對比較活躍,更新速度也比較快。
Jackson對於複雜類型的json轉換bean會出現問題,一些集合Map,List的轉換出現問題。
Jackson對於複雜類型的bean轉換Json,轉換的json格式不是標準的Json格式
3.Google的Gson
Gson是目前功能最全的Json解析神器,Gson當初是爲因應Google公司內部需求而由Google自行研發而來,
但自從在2008年五月公開發布初版後已被許多公司或用戶應用。
Gson的應用主要爲toJson與fromJson兩個轉換函數,無依賴,不須要例外額外的jar,只依賴於gson-2.7.jar,可以直接跑在JDK上。
而在使用這種對象轉換以前需先建立好對象的類型以及其成員才能成功的將JSON字符串成功轉換成相對應的對象。
類裏面只要有get和set方法,Gson徹底能夠將複雜類型的json到bean或bean到json的轉換,是JSON解析的神器。
Gson在功能上面無可挑剔,可是性能上面比FastJson有所差距。
4.阿里巴巴的FastJson
Fastjson是一個Java語言編寫的高性能的JSON處理器,由阿里巴巴公司開發。
無依賴,不須要例外額外的jar,只須要fastjson-1.2.8.jar,可以直接跑在JDK上。
FastJson在複雜類型的Bean轉換Json上會出現一些問題,可能會出現引用的類型,致使Json轉換出錯,須要制定引用。
FastJson採用首創的算法,將parse的速度提高到極致,超過全部json庫。java

 

綜上4種Json技術的比較,在項目選型的時候可使用Google的Gson和阿里巴巴的FastJson兩種並行使用,
若是隻是功能要求,沒有性能要求,可使用google的Gson,
若是有性能上面的要求可使用Gson將bean轉換json確保數據的正確,使用FastJson將Json轉換Beangit

 

2、實例算法

1.首先創建實體Beanjson

(1)學生實體類數組

 1 package com.model;
 2 
 3 import java.io.Serializable;
 4 import java.util.Date;
 5 
 6 /**
 7   * @ClassName: Student 
 8   * @Description: TODO(學生實體類) 
 9   * @author xbq 
10   * @date 2017-2-2 上午9:31:06 
11   *
12  */
13 public class Student implements Serializable{
14 
15     /** 
16      * @Fields serialVersionUID : TODO(用一句話描述這個變量表示什麼) 
17     */ 
18     private static final long serialVersionUID = 1L;
19     
20     private int id;
21     private String name;
22     private Date birth;
23     private String address;
24     
25     public Student() {
26         super();
27     }
28     
29     public Student(int id, String name, Date birth, String address) {
30         super();
31         this.id = id;
32         this.name = name;
33         this.birth = birth;
34         this.address = address;
35     }
36 
37     public int getId() {
38         return id;
39     }
40     public void setId(int id) {
41         this.id = id;
42     }
43     public String getName() {
44         return name;
45     }
46     public void setName(String name) {
47         this.name = name;
48     }
49     public Date getBirth() {
50         return birth;
51     }
52     public void setBirth(Date birth) {
53         this.birth = birth;
54     }
55     public String getAddress() {
56         return address;
57     }
58     public void setAddress(String address) {
59         this.address = address;
60     }
61     
62     @Override
63     public String toString() {
64         return "Student [id=" + id + ", name=" + name + ", birth=" + birth
65                 + ", address=" + address + "]";
66     }
67     
68 }
View Code

(2)包含學生List的實體類框架

 1 package com.model;
 2 
 3 import java.io.Serializable;
 4 import java.util.List;
 5 
 6 /**
 7  * 
 8  * @ClassName: StudentAnalysis 
 9  * @Description: TODO(包含學生 實體類 的List的 實體類) 
10  * @author xbq 
11  * @date 2017-2-2 上午9:31:46 
12  *
13  */
14 public class StudentAnalysis implements Serializable{
15 
16     /** 
17     * @Fields serialVersionUID : TODO(用一句話描述這個變量表示什麼) 
18     */ 
19     private static final long serialVersionUID = 1L;
20     private List<Student> students;
21     
22     public StudentAnalysis() {
23         super();
24     }
25     
26     public StudentAnalysis(List<Student> students) {
27         super();
28         this.students = students;
29     }
30 
31     public List<Student> getStudents() {
32         return students;
33     }
34     public void setStudents(List<Student> students) {
35         this.students = students;
36     }
37 
38     @Override
39     public String toString() {
40         return "StudentAnalysis [students=" + students + "]";
41     }
42     
43 }
View Code

 

2.Gson測試類和封裝的工具類dom

(1)測試類ide

  1 package com.gson.test;
  2 
  3 import java.util.ArrayList;
  4 import java.util.Date;
  5 import java.util.HashMap;
  6 import java.util.List;
  7 import java.util.Map;
  8 
  9 import org.junit.Test;
 10 
 11 import com.google.gson.Gson;
 12 import com.google.gson.GsonBuilder;
 13 import com.google.gson.reflect.TypeToken;
 14 import com.model.Student;
 15 import com.model.StudentAnalysis;
 16 
 17 /**
 18  * @ClassName: TestGson 
 19  * @Description: TODO(這裏用一句話描述這個類的做用) 
 20  * @author xbq 
 21  * @date 2017-2-2 上午9:37:46 
 22  * Gson將 實體中的 Timestamp 類型 在 json中轉化爲   Feb 2, 2017 9:36:41 AM 形式
 23  *            Date 類型 在 json中轉化爲   Feb 2, 2017 9:36:41 AM 形式
 24  */
 25 public class TestGson {
 26     
 27     /**
 28      * @Title: testObjectToJson 
 29      * @Description: TODO(對象轉Json) 
 30      * @param     設定文件 
 31      * @return void    返回類型 
 32      * @throws
 33      */
 34     @Test
 35     public void testObjectToJson(){
 36         Gson gson = new GsonBuilder().serializeNulls().create();  // 這樣實例化 會將 實體中空的屬性 在 json中顯示爲 null
 37         Student student = new Student(10,"張三",new Date(),null);
 38         String json = gson.toJson(student);
 39         System.out.println("json==" + json);
 40         
 41         List<Student> list = new ArrayList<Student>();
 42         student = new Student(1,"張三",new Date(),null);
 43         list.add(student);
 44         student = new Student(2,"李四",new Date(),null);
 45         list.add(student);
 46         student = new Student(3,"王五",null,"山東");
 47         list.add(student);
 48         StudentAnalysis analysis = new StudentAnalysis(list);
 49         String studentsJson = gson.toJson(analysis);
 50         System.out.println("json==" + studentsJson);
 51         
 52     }
 53     
 54     
 55     @Test
 56     public void jsonToObject(){
 57         Gson gson = new GsonBuilder().serializeNulls().create();
 58         String stuJson = "{\"id\":10,\"name\":\"張三\",\"birth\":\"Feb 2, 2017 9:46:39 AM\",\"createDate\":\"Feb 2, 2017 9:46:39 AM\",\"address\":null}";
 59         Student stu = gson.fromJson(stuJson, Student.class);
 60         System.out.println("student==" + stu);
 61         
 62         String stuListJson = "{\"students\":[{\"id\":1,\"name\":\"張三\",\"birth\":\"Feb 2, 2017 9:46:39 AM\",\"createDate\":\"Feb 2, 2017 9:46:39 AM\",\"address\":null},{\"id\":2,\"name\":\"李四\",\"birth\":\"Feb 2, 2017 9:46:39 AM\",\"createDate\":null,\"address\":null},{\"id\":3,\"name\":\"王五\",\"birth\":null,\"createDate\":\"Feb 2, 2017 9:46:39 AM\",\"address\":\"山東\"}]}";
 63         StudentAnalysis analysis = gson.fromJson(stuListJson, StudentAnalysis.class);
 64         System.out.println("studentList==" + analysis);
 65         
 66         // 遍歷List
 67         for(Student s : analysis.getStudents()){
 68             System.out.println(s);
 69         }
 70         
 71         String studentsJson = gson.toJson(analysis);
 72         System.out.println("json==" + studentsJson);
 73         
 74     }
 75     
 76     @Test
 77     public void ListToJson(){
 78         Gson gson = new GsonBuilder().serializeNulls().create();
 79         
 80         List<Student> list = new ArrayList<Student>();
 81         Student student = new Student(1,"張三",new Date(),null);
 82         list.add(student);
 83         student = new Student(2,"李四",new Date(),null);
 84         list.add(student);
 85         student = new Student(3,"王五",null,"山東");
 86         list.add(student);
 87         // list 轉爲 json
 88         String json = gson.toJson(list);
 89         System.out.println(json);
 90         
 91         // json轉爲 List
 92         List<Student> students = gson.fromJson(json, new TypeToken<List<Student>>(){}.getType());  
 93         System.out.println(students);
 94     }
 95     
 96     @Test
 97     public void MapToJson(){
 98         Gson gson = new GsonBuilder().serializeNulls().create();
 99         
100         Map<String,List<Student>> map = new HashMap<String,List<Student>>();
101         List<Student> list1 = new ArrayList<Student>();
102         Student student = new Student(1,"張三",new Date(),null);
103         list1.add(student);
104         student = new Student(2,"李四",new Date(),null);
105         list1.add(student);
106         student = new Student(3,"王五",null,"山東");
107         list1.add(student);
108         
109         List<Student> list2 = new ArrayList<Student>();
110         student = new Student(4,"張三2",new Date(),null);
111         list2.add(student);
112         student = new Student(5,"李四2",new Date(),null);
113         list2.add(student);
114         student = new Student(6,"王五2",null,"山東");
115         list2.add(student);
116         
117         List<Student> list3 = new ArrayList<Student>();
118         student = new Student(7,"張三2",new Date(),null);
119         list3.add(student);
120         student = new Student(8,"李四2",new Date(),null);
121         list3.add(student);
122         student = new Student(9,"王五2",null,"山東");
123         list3.add(student);
124         
125         map.put("list1", list1);
126         map.put("list2", list2);
127         map.put("list3", list3);
128         
129         // map轉爲 json
130         String json = gson.toJson(map);
131         System.out.println(json);
132         
133         // json轉爲map
134         map = gson.fromJson(json, new TypeToken<HashMap<String,List<Student>>>(){}.getType());
135         System.out.println(map);
136     }
137     
138 }
View Code

 

(2)工具類(在項目中能夠直接使用)函數

  1 package com.gson.util;
  2 
  3 import java.lang.reflect.Type;
  4 import java.util.ArrayList;
  5 import java.util.Date;
  6 import java.util.HashMap;
  7 import java.util.List;
  8 import java.util.Map;
  9 
 10 import com.google.gson.Gson;
 11 import com.google.gson.GsonBuilder;
 12 import com.google.gson.reflect.TypeToken;
 13 import com.model.Student;
 14 import com.model.StudentAnalysis;
 15 
 16 /**
 17  * @ClassName: GsonUtil 
 18  * @Description: TODO(這裏用一句話描述這個類的做用) 
 19  * @author xbq 
 20  * @date 2017-2-2 下午12:42:59 
 21  *Gson將 實體中的 Timestamp 類型 在 json中轉化爲   Feb 2, 2017 9:36:41 AM 形式
 22  *            Date 類型 在 json中轉化爲   Feb 2, 2017 9:36:41 AM 形式
 23  */
 24 public class GsonUtil {
 25 
 26     private static Gson gson = null;
 27     
 28     static {
 29         gson = new GsonBuilder().serializeNulls().create();  // 這樣實例化 會將 實體中空的屬性 在 json中顯示爲 null
 30     }
 31     
 32     /**
 33      * @Title: objectToJson 
 34      * @Description: TODO(實體類、List、Map 轉爲 Json) 
 35      * @param @param obj
 36      * @param @return    設定文件 
 37      * @return String    返回類型 
 38      * @throws
 39      */
 40     public static String objectToJson(Object obj){
 41         return gson.toJson(obj);
 42     }
 43     
 44     /**
 45      * @Title: jsonToObject 
 46      * @Description: TODO(Json轉化爲實體類 或 List、Map) 
 47      * @param @param json
 48      * @param @param type
 49      * @param @return    設定文件 
 50      * @return Object    返回類型 
 51      * @throws
 52      */
 53     public static Object jsonToObject(String json,Type type){
 54         if(type instanceof List){
 55             return gson.fromJson(json, new TypeToken<List<Type>>(){}.getType());  
 56         }else if(type instanceof Map){
 57             return gson.fromJson(json, new TypeToken<HashMap<String,List<Type>>>(){}.getType());
 58         }else {
 59             return gson.fromJson(json, type);
 60         }
 61     }
 62     
 63     
 64     /**
 65      * 測試
 66      * @Title: main 
 67      * @Description: TODO(這裏用一句話描述這個方法的做用) 
 68      * @param @param args    設定文件 
 69      * @return void    返回類型 
 70      * @throws
 71      */
 72     public static void main(String[] args) {
 73         Student student = new Student(10,"張三",new Date(),null);
 74         String json = objectToJson(student);
 75         System.out.println("---1---學生Student實體轉爲的Json------");
 76         System.out.println(json);
 77         
 78         List<Student> list = new ArrayList<Student>();
 79         student = new Student(1,"張三",new Date(),null);
 80         list.add(student);
 81         student = new Student(2,"李四",new Date(),null);
 82         list.add(student);
 83         student = new Student(3,"王五",null,"山東");
 84         list.add(student);
 85         StudentAnalysis analysis = new StudentAnalysis(list);
 86         String studentsJson = objectToJson(analysis);
 87         System.out.println("---2----學生StudentAnalysis實體轉爲的Json------");
 88         System.out.println(studentsJson);
 89         
 90         
 91         String stuJson = "{\"id\":10,\"name\":\"張三\",\"birth\":\"Feb 2, 2017 9:46:39 AM\",\"address\":null}";
 92         Student stu = (Student) jsonToObject(stuJson, Student.class);
 93         System.out.println("---3----學生Json轉化爲Student實體-------");
 94         System.out.println(stu);
 95         
 96         String stuListJson = "{\"students\":[{\"id\":1,\"name\":\"張三\",\"birth\":\"Feb 2, 2017 9:46:39 AM\",\"address\":null},{\"id\":2,\"name\":\"李四\",\"birth\":\"Feb 2, 2017 9:46:39 AM\",\"createDate\":null,\"address\":null},{\"id\":3,\"name\":\"王五\",\"birth\":null,\"createDate\":\"Feb 2, 2017 9:46:39 AM\",\"address\":\"山東\"}]}";
 97         StudentAnalysis analysis1 = (StudentAnalysis) jsonToObject(stuListJson, StudentAnalysis.class);
 98         System.out.println("---4----學生analysis1轉化爲StudentAnalysis實體-------");
 99         System.out.println(analysis1);
100         
101         System.out.println("---5----遍歷學生List--------");
102         // 遍歷List
103         for(Student s : analysis1.getStudents()){
104             System.out.println(s);
105         }
106         
107     }
108 }
View Code

 

3.FastJson測試類和封裝的工具類

(1)測試類

  1 package com.fastjson.test;
  2 
  3 import java.util.ArrayList;
  4 import java.util.Date;
  5 import java.util.HashMap;
  6 import java.util.List;
  7 import java.util.Map;
  8 
  9 import org.junit.Test;
 10 
 11 import com.alibaba.fastjson.JSON;
 12 import com.alibaba.fastjson.TypeReference;
 13 import com.alibaba.fastjson.serializer.SerializerFeature;
 14 import com.model.Student;
 15 import com.model.StudentAnalysis;
 16 
 17 /**
 18  * fastjson 將 Date 和 Timestamp 類型的 轉化爲 long的形式
 19  * @ClassName: TestFastJson 
 20  * @Description: TODO(這裏用一句話描述這個類的做用) 
 21  * @author xbq 
 22  * @date 2017-2-2 下午2:00:27 
 23  *
 24  */
 25 public class TestFastJson {
 26 
 27     @Test
 28     public void ObjectToJson(){
 29         Student student = new Student(10,"張三",new Date(),null);
 30         //  缺省狀況下FastJSON不輸入爲值Null的字段,可使用SerializerFeature.WriteMapNullValue使其輸出
 31         String json = JSON.toJSONString(student,SerializerFeature.WriteMapNullValue);
 32         System.out.println(json);
 33         
 34         List<Student> list = new ArrayList<Student>();
 35         student = new Student(1,"張三",new Date(),null);
 36         list.add(student);
 37         student = new Student(2,"李四",new Date(),null);
 38         list.add(student);
 39         student = new Student(3,"王五",null,"山東");
 40         list.add(student);
 41         StudentAnalysis analysis = new StudentAnalysis(list);
 42         json = JSON.toJSONString(analysis,SerializerFeature.WriteMapNullValue);
 43         System.out.println(json);
 44     }
 45     
 46     @Test
 47     public void jsonToObject(){
 48         String json = "{\"address\":null,\"birth\":1486015195815,\"createDate\":1486015195815,\"id\":10,\"name\":\"張三\"}";
 49         Student student =  JSON.parseObject(json,Student.class);
 50         System.out.println(student);
 51         
 52         json = "{\"students\":[{\"address\":null,\"birth\":1486015524472,\"createDate\":1486015524472,\"id\":1,\"name\":\"張三\"},{\"address\":null,\"birth\":1486015524472,\"createDate\":null,\"id\":2,\"name\":\"李四\"},{\"address\":\"山東\",\"birth\":null,\"createDate\":1486015524472,\"id\":3,\"name\":\"王五\"}]}";
 53         StudentAnalysis analysis = JSON.parseObject(json,StudentAnalysis.class);
 54         System.out.println(analysis);
 55     }
 56     
 57     @Test
 58     public void ListToJson(){
 59         List<Student> list = new ArrayList<Student>();
 60         Student student = new Student(1,"張三",new Date(),null);
 61         list.add(student);
 62         student = new Student(2,"李四",new Date(),null);
 63         list.add(student);
 64         student = new Student(3,"王五",null,"山東");
 65         list.add(student);
 66         
 67         // list轉化爲 json 數組
 68         String json = JSON.toJSONString(list,SerializerFeature.WriteMapNullValue);
 69         System.out.println(json);
 70         
 71         // json數組轉爲 list
 72         List<Student> list1 = JSON.parseArray(json, Student.class);
 73         System.out.println(list1);
 74     }
 75     
 76     
 77     @Test
 78     public void MapToJson(){
 79         Map<String,List<Student>> map = new HashMap<String,List<Student>>();
 80         List<Student> list1 = new ArrayList<Student>();
 81         Student student = new Student(1,"張三",new Date(),null);
 82         list1.add(student);
 83         student = new Student(2,"李四",new Date(),null);
 84         list1.add(student);
 85         student = new Student(3,"王五",null,"山東");
 86         list1.add(student);
 87         
 88         List<Student> list2 = new ArrayList<Student>();
 89         student = new Student(4,"張三2",new Date(),null);
 90         list2.add(student);
 91         student = new Student(5,"李四2",new Date(),null);
 92         list2.add(student);
 93         student = new Student(6,"王五2",null,"山東");
 94         list2.add(student);
 95         
 96         List<Student> list3 = new ArrayList<Student>();
 97         student = new Student(7,"張三2",new Date(),null);
 98         list3.add(student);
 99         student = new Student(8,"李四2",new Date(),null);
100         list3.add(student);
101         student = new Student(9,"王五2",null,"山東");
102         list3.add(student);
103         
104         map.put("list1", list1);
105         map.put("list2", list2);
106         map.put("list3", list3);
107         
108         // map 轉爲 json
109         String json = JSON.toJSONString(map,SerializerFeature.WriteMapNullValue);
110         System.out.println(json);
111         
112         // json轉爲map
113         map = JSON.parseObject(json,new TypeReference<Map<String,List<Student>>>(){} );
114         System.out.println(map);
115     }
116 }
View Code

(2)工具類(在項目中能夠直接使用)

 1 package com.fastjson.util;
 2 
 3 import java.lang.reflect.Type;
 4 import java.util.ArrayList;
 5 import java.util.Date;
 6 import java.util.List;
 7 import java.util.Map;
 8 
 9 import com.alibaba.fastjson.JSON;
10 import com.alibaba.fastjson.TypeReference;
11 import com.alibaba.fastjson.serializer.SerializerFeature;
12 import com.model.Student;
13 
14 /**
15  * @ClassName: FastJsonUtil 
16  * @Description: TODO(FastJson工具類) 
17  * @author xbq 
18  * @date 2017-2-2 下午6:25:08 
19  *
20  */
21 public class FastJsonUtil {
22 
23     /**
24      * @Title: objectToJson 
25      * @Description: TODO(實體類、List、Map轉化爲 json) 
26      * @param @param obj
27      * @param @return    設定文件 
28      * @return String    返回類型 
29      * @throws
30      */
31     public static String objectToJson(Object obj){
32         //  缺省狀況下FastJSON不輸入爲值Null的字段,可使用SerializerFeature.WriteMapNullValue使其輸出
33         return JSON.toJSONString(obj, SerializerFeature.WriteMapNullValue);
34     }
35     
36     /**
37      * @Title: jsonToObject 
38      * @Description: TODO(json轉化爲實體) 
39      * @param @param json
40      * @param @param type
41      * @param @return    設定文件 
42      * @return Object    返回類型 
43      * @throws
44      */
45     public static Object jsonToObject(String json,Type type){
46         return JSON.parseObject(json, type);
47     }
48     
49     /**
50      * @Title: jsonToList 
51      * @Description: TODO(json轉化爲List) 
52      * @param @param json
53      * @param @param obj  若傳 Student的時候,則  傳參數  new Student()
54      * @param @return    設定文件 
55      * @return Object    返回類型 
56      * @throws
57      */
58     @SuppressWarnings("rawtypes")
59     public static  List jsonToList(String json,Object obj){
60         return JSON.parseArray(json, obj.getClass());
61     }
62     
63     /**
64      * @Title: jsonToMap 
65      * @Description: TODO(json轉化爲Map) 
66      * @param @param json
67      * @param @param type
68      * @param @return    設定文件 
69      * @return Object    返回類型 
70      * @throws
71      */
72     @SuppressWarnings("rawtypes")
73     public static Map jsonToMap(String json,Type type){
74         return JSON.parseObject(json,new TypeReference<Map<String,List>>(){});
75     }
76     
77     // 測試
78     public static void main(String[] args) {
79         
80         List<Student> list = new ArrayList<Student>();
81         Student student = new Student(1,"張三",new Date(),null);
82         list.add(student);
83         student = new Student(2,"李四",new Date(),null);
84         list.add(student);
85         student = new Student(3,"王五",null,"山東");
86         list.add(student);
87         
88         // list轉化爲 json 數組
89         String json = objectToJson(list);
90         System.out.println(json);
91         
92         // json數組轉爲 list
93         @SuppressWarnings("unchecked")
94         List<Student> list1 = jsonToList(json, new Student());
95         System.out.println(list1);
96     }
97 }
View Code

4.Json-lib測試類

(1)測試類

 1 package com.jsonlib.test;
 2 
 3 import java.text.SimpleDateFormat;
 4 import java.util.ArrayList;
 5 import java.util.Date;
 6 import java.util.List;
 7 
 8 import net.sf.json.JSONArray;
 9 import net.sf.json.JSONObject;
10 import net.sf.json.JsonConfig;
11 import net.sf.json.processors.JsonValueProcessor;
12 
13 import org.junit.Test;
14 
15 import com.model.Student;
16 
17 public class TestJson_lib {
18 
19     // 對象轉爲json
20     @Test
21     public void ObjectToJson(){
22         Student student = new Student(10,"張三",new Date(),null);
23         
24         JsonConfig config=new JsonConfig();
25         //設置 json轉換的處理器用來處理日期類型
26         //凡是反序列化Date類型的對象,都會通過該處理器進行處理
27         config.registerJsonValueProcessor(Date.class, new JsonValueProcessor() {
28             //參數1 :屬性名參數2:json對象的值參數3:jsonConfig對象
29             public Object processObjectValue(String arg0, Object arg1,JsonConfig arg2) {
30                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
31                 Date d = (Date) arg1;
32                 return sdf.format(d);
33             }
34             public Object processArrayValue(Object arg0, JsonConfig arg1) {
35                 return null;
36             }
37         });
38         
39         JSONObject jsonObject = JSONObject.fromObject(student,config);
40         System.out.println(jsonObject.toString());
41     }
42     
43     // json轉爲對象   
44     @Test
45     public void JsonToObject(){
46         String json = "{\"address\":\"\",\"birth\":\"2017-02-02 16:14:42\",\"id\":10,\"name\":\"張三\"}";
47         JsonConfig config=new JsonConfig();
48         //設置 json轉換的處理器用來處理日期類型
49         //凡是反序列化Date類型的對象,都會通過該處理器進行處理
50         config.registerJsonValueProcessor(Date.class, new JsonValueProcessor() {
51             //參數1 :屬性名參數2:json對象的值參數3:jsonConfig對象
52             public Object processObjectValue(String arg0, Object arg1,JsonConfig arg2) {
53                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
54                 Date d = (Date) arg1;
55                 return sdf.format(d);
56             }
57             public Object processArrayValue(Object arg0, JsonConfig arg1) {
58                 return null;
59             }
60         });
61         Student student = (Student) JSONObject.toBean(JSONObject.fromObject(json,config), Student.class);
62         System.out.println(student);
63     }
64     
65     @SuppressWarnings({ "deprecation", "unchecked" })
66     @Test
67     public void ListToJson(){
68         List<Student> list = new ArrayList<Student>();
69         Student student = new Student(1,"張三",new Date(),null);
70         list.add(student);
71         student = new Student(2,"李四",new Date(),null);
72         list.add(student);
73         student = new Student(3,"王五",null,"山東");
74         list.add(student);
75 
76         // list轉json
77         JSONArray jsonArray = JSONArray.fromObject(list);
78         System.out.println(jsonArray);
79         
80         // json轉爲list
81         list = JSONArray.toList(JSONArray.fromObject(jsonArray.toString()),Student.class);
82         System.out.println(list);
83         
84         // 遍歷list
85         for(Student s : list){
86             System.out.println(s);
87         }
88     }
89     
90 }
View Code

 

3、源碼下載

源碼中包含實例與jar包----- http://download.csdn.net/detail/u010821757/9746160

相關文章
相關標籤/搜索