一、基础概念
fastjson是由阿里巴巴下面的开源框架(官网),主要用于对代码进行序列化和反序列化,所谓序列化就是将Java bean-->json格式,反序列化将json-->java bean。
为什么使用fastjson:
- 速度快:fastjson相对其他JSON库的特点是快,从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越。
- 使用广泛:fastjson在阿里巴巴大规模使用。
- 测试完备:fastjson有非常多的testcase,在1.2.11版本中,testcase超过3321个。每次发布都会进行回归测试,保证质量稳定。
- 使用简单:fastjson的API十分简洁。
String text = JSON.toJSONString(obj); //序列化
VO vo = JSON.parseObject("{...}", VO.class); //反序列化
- 功能完备:支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展。
二、代码demo
1、依赖配置
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.31</version>
</dependency>
2、Bean
@NoArgsConstructor // 无参构造函数
@AllArgsConstructor // 全参构造函数
@Data // get/set/tostring
public class User {
@JSONField(name = "id", ordinal = 1)
private Integer id;
@JSONField(name = "姓名", ordinal = 2)
private String name;
@JSONField(name = "年龄", ordinal = 3)
private Integer age;
@JSONField(name = "性别", ordinal = 4)
private String gender;
@JSONField(name = "地址", ordinal = 5)
private String address;
@JSONField(name = "生日", format = "yyyy-MM-dd", ordinal = 6, alternateNames = {"出生日期","生日"})
private Date birth;
@JSONField(name = "爱好", ordinal = 7)
private String[] hobbits;
}
@Test
public void testJsonFiledSerializable() {
User user = new User(1, "张三", 25, "男", "北京市", new Date(), new String[]{});
System.out.println(JSON.toJSONString(user));
String str = "{"id":1,"姓名":"李四","年龄":25,"性别":"男","地址":"北京市","出生日期":"2020-12-12","爱好":[]}";
System.out.println(JSON.parseObject(str, User.class));
}
{"id":1,"姓名":"张三","年龄":25,"性别":"男","地址":"北京市","生日":"2023-12-04","爱好":[]}
User(id=1, name=李四, age=25, gender=男, address=北京市, birth=Sat Dec 12 00:00:00 CST 2020, hobbits=[])