前言
在软件程序开发中,数据的传输和存储是一项非常重要的任务。特别是在分布式系统中,数据的序列化和反序列化是一项关键的技术,以确保不同系统之间的数据交换的正确性和高效性。
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,已经成为了广泛使用的数据序列化和反序列化的格式之一。在Java开发中,也存在多种用于处理JSON的工具。
Json序列化与反序列化工具,常用的有jackson、fastjson、Gson。其中fastjson性能最快,但是处理复杂类型的会有bug。
序列化工具 | 优点 | 缺点 |
---|---|---|
Gson | 简单易用,性能较好 | 不支持注解,不支持Jdk8的新特性 |
Jackson | 功能丰富,性能较好 | 配置较为复杂 |
Fastjson | 性能极好 | 安全性问题较多 |
1、使用Gson进行JSON序列化
1)引入依赖
<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.10.1</version>
</dependency>
2)代码实现
Gson gson = new Gson();//序列化
String userStr = gson.toJson(user);//反序列化
User user = gson.fromJson(userStr,User.class);//List序列化
List<User> list = new ArrayList<>();
list.add(user1);
list.add(user2);
String listStr = gson.toJson(list);//List反序列化
List<User> userList= gson.fromJson(listStr, new TypeToken<List<User>>(){}.getType());
System.out.println(userList.get(0).getUserId());
2、使用Jackson进行JSON序列化
1)引入依赖
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.2</version>
</dependency><!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.15.2</version>
</dependency><!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.15.2</version>
</dependency>
2)代码实现
ObjectMapper mapper = new ObjectMapper();//序列化
String userStr = mapper.writeValueAsString(user);//反序列化
User user= mapper.readValue(userStr,User.class);//List序列化
List<User> userlist = new ArrayList<>();
userlist.add(user1);
userlist.add(user2);
String listStr = mapper.writeValueAsString(userlist);//List反序列化
List<User> userList = mapper.readValue(listStr,new TypeReference<List<User>>(){});
System.out.println(userList.get(0).getUserName());//Map序列化
Map<String,User> map = new HashMap<>();
map.put("u1",user1);
map.put("u2",user2);
String mapStr = mapper.writeValueAsString(map);//Map反序列化
Map<String,User> tmpMap = mapper.readValue(mapStr, new TypeReference<Map<String,User>>() {});
System.out.println(tmpMap.get("u1").getUserId());
3、使用Fastjson进行JSON序列化
1)引入依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.35</version>
</dependency>
2)代码实现
//序列化
String userStr = JSON.toJSONString(user);//反序列化
User user=JSON.parseObject(userStr, User.class);//List序列化
List<User> list = new ArrayList<>();
list.add(user1);
list.add(user2);
String listStr = JSON.toJSONString(list);//List反序列化
List<User> userList= JSON.parseArray(listStr, User.class);
System.out.println(userList.get(0).getUserId());//Map序列化
Map<String,User> map = new HashMap<>();
map.put("u1",user1);
map.put("u2",user2);
String mapStr = JSON.toJSONString(map);
//Map反序列化
Map<String,User> tmpMap = JSON.parseObject(mapStr,new TypeReference<Map<String,User>>(){});
System.out.println(tmpMap.get("u1").getUserId());