Java中fastjson、Jackson、Gson的使用:解析、序列化与反序列化
一、使用fastjson

fastjson 是阿里巴巴的一个开源 JSON 解析库。它具备解析 JSON 格式字符串的能力。它还支持把 Java Bean 序列化成 JSON 字符串。同时,它也能够从 JSON 字符串反序列化到 JavaBean。
依赖
com.alibaba
fastjson
2.0.11.graal
介绍
User类(自定义的)
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {
private String name;
private String sex;
private int age;
使用 @JsonFormat 注解,其 pattern 属性设置为 "yyyy-MM-dd HH:mm:ss",timezone 属性设置为 "GMT+8"。
private Date birthday;
}
对象转json
//对象转json
使用 JSON.toJSONString 方法将 user 对象转换为字符串并赋值给 userJson 变量。
System 输出“userJson = ”与 userJson 进行拼接后的内容。
json转对象(Map也属于对象)
//json转Map
通过 JSON.parseObject 方法,将 userJson 解析为一个 Map 类型的对象,这个对象被赋值给了 Map 类型的变量 userMap。
System 输出打印出 "userMap = " 与 userMap 进行拼接后的内容。
//json转对象
使用 JSON.parseObject 方法将 mapJson 解析为 User 类的对象,并赋值给 user1 。
System.out.println("用户 1 等于 " + user1);
二、 使用Jackson
Jackson 被称作“ Java 的 JSON 库”,也被称作“ Java 的最佳 JSON 解析器”。或者简称为“ JSON for Java”,并且它是 springboot 自带的 json 解析库。
1、依赖
com.fasterxml.jackson.core
jackson-annotations
2.12.1
2、介绍
对象转json、json转对象
创建了一个 ObjectMapper 对象,其名称为 objectMapper 。
try {
//对象转json
使用 objectMapper 将 user 转换为字符串并赋值给 userJson 。
System 会输出 "userJson = " 与 userJson 进行拼接后的内容。
//json转对象
使用 objectMapper 将 userJson 读取为 User 类的实例,得到 User jsonUser 。
System 输出打印出 "jsonUser = " 与 jsonUser 进行拼接后的内容。
当捕获到由 JsonProcessingException 引发的异常时;
e.printStackTrace();
}
三、使用Gson
Gson 是一个用于 Java 语言的库。它能够把 Java 对象转换成 JSON 形式的表示。同时,它也可以把 JSON 字符串转化为与之等效的 Java 对象。Gson 具备处理各种 Java 对象的能力,其中也包括那些您没有源代码的已经存在的对象。
1、依赖
com.google.code.gson
gson
2.8.6
2、介绍
// gson无法正常将时间戳转化成date
// 使用JSON内存树注册Date类型
Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, 运用了 DateTypeAdapter()) // 默认适配器
.create();
User user = new User();
user.setSex("女");
user.setName("xx");
user.setBirthday(new Date());
user.setAge(11);
System 输出打印出“user = ”与 user 进行拼接后的内容。
//对象转Json
使用 Gson 库将 user 对象转换为 JSON 字符串并赋值给 userJson 变量。
System.out.println("userJson = " + userJson);
//json转对象
使用 gson 将 userJson 转换为 User 类的实例,即创建了一个 User 对象,其数据来源于 userJson。
System.out.println("jsonUser 等于 " + jsonUser);