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 @   kingsleylam  阅读(477)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示