Java对象与Json之间的转换

使用Jackson的ObjectMapper对象的readValue和writeValueAsString方法可以进行转换。

对于简单基本类型或String类型的对象,使用上述方法可以满足。

但是如果要转换复杂类型Collection如 List<YourBean>,那么就需要先反序列化复杂类型为泛型的Collection Type。

如果是ArrayList<YourBean>那么使用ObjectMapper 的getTypeFactory().constructParametricType(collectionClass, elementClasses);

如果是HashMap<String,YourBean>那么 ObjectMapper 的getTypeFactory().constructParametricType(HashMap.class,String.class, YourBean.class);

例子如下,定义两个模型

 1 package com.khlin.com.khlin.jackson.json.test;
 2 
 3 import java.util.List;
 4 
 5 public class Student {
 6     
 7     private String familyname;
 8     
 9     private String lastname;
10     
11     private int age;
12     
13     private String[] familyMembers;
14     
15     private Place hometown;
16     
17     public Place getHometown() {
18         return hometown;
19     }
20 
21     public void setHometown(Place hometown) {
22         this.hometown = hometown;
23     }
24 
25     public List<Place> getFavoritePlaces() {
26         return favoritePlaces;
27     }
28 
29     public void setFavoritePlaces(List<Place> favoritePlaces) {
30         this.favoritePlaces = favoritePlaces;
31     }
32 
33     private List<Place> favoritePlaces;
34 
35     public String getFamilyname() {
36         return familyname;
37     }
38 
39     public void setFamilyname(String familyname) {
40         this.familyname = familyname;
41     }
42 
43     public String getLastname() {
44         return lastname;
45     }
46 
47     public void setLastname(String lastname) {
48         this.lastname = lastname;
49     }
50 
51     public int getAge() {
52         return age;
53     }
54 
55     public void setAge(int age) {
56         this.age = age;
57     }
58 
59     public String[] getFamilyMembers() {
60         return familyMembers;
61     }
62 
63     public void setFamilyMembers(String[] familyMembers) {
64         this.familyMembers = familyMembers;
65     }
66 }
 1 package com.khlin.com.khlin.jackson.json.test;
 2 
 3 public class Place {
 4     
 5     private String province;
 6     
 7     private String city;
 8 
 9     public String getProvince() {
10         return province;
11     }
12 
13     public void setProvince(String province) {
14         this.province = province;
15     }
16 
17     public String getCity() {
18         return city;
19     }
20 
21     public void setCity(String city) {
22         this.city = city;
23     }
24 }

转换代码:

 1 ObjectMapper objectMapper = new ObjectMapper();
 2 
 3         Place hometown = new Place();
 4         hometown.setProvince("guangdong");
 5         hometown.setCity("jieyang");
 6 
 7         Place place1 = new Place();
 8         place1.setProvince("fujian");
 9         place1.setCity("amoy");
10 
11         Place place2 = new Place();
12         place2.setProvince("zhejiang");
13         place2.setCity("hangzhou");
14 
15         List<Place> places = new ArrayList<Place>();
16         places.add(place1);
17         places.add(place2);
18         Student student = generateStudent("dacui", "lin", hometown, places);
19 
20         Student student2 = generateStudent("ku", "lee", hometown, places);
21 
22         List<Student> students = new ArrayList<Student>();
23         students.add(student);
24         students.add(student2);
25 
26         String result = objectMapper.writeValueAsString(students);
27         System.out.println(result);
28 
29         JavaType javaType = objectMapper.getTypeFactory()
30                 .constructParametricType(ArrayList.class, Student.class);
31 
32         List<Student> mapperStudents = objectMapper.readValue(result,
33                 javaType);
34         Student mapperStudent1 = mapperStudents.get(0);
35         Student mapperStudent2 = mapperStudents.get(1);
36         System.out.println("success");

 

posted @ 2016-04-30 12:58  kingsleylam  阅读(468)  评论(0编辑  收藏  举报