fastjson介绍
fastjson是一个Java库,用来在Java对象和JSON之间相互转换。
fastjson的目标(官方原话):
我翻译一下:
-
性能非常好;
-
封装非常高;
-
转换非常强;
-
泛型也支持;
-
自定义表示;
-
复杂也支持;
这6个目标,书读少的我理解起来费劲,看着这些字,视线开始模糊...突然这些字动了,不断变幻,凝聚成了两个字:“牛逼”。阿里巴巴也确实做到了,fastjson(24.9k star)作为国产原创库,PK掉了jackson(7.6k star)和gson(21.3k star),在国内应用领域坐上了头把交椅。
安装fastsjon
Maven引入:
com.alibaba
fastjson
VERSION_CODE
版本可以在 https://mvnrepository.com/artifact/com.alibaba/fastjson 查找:
虽然2.0.x版本出来了,但是使用得多的还是1.2.x版本。至少得1.2.48以上,因为这以下的版本之前出过轰动全国的安全漏洞。
入门示例
Group.java
public class Group {
private Long id;
private String name;
private List users = new ArrayList();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List getUsers() {
return users;
}
public void setUsers(List users) {
this.users = users;
}
public void addUser(User user) {
users.add(user);
}
}
User.java
public class User {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
编码,Java对象转换为JSON:
import com.alibaba.fastjson.JSON;
Group group = new Group();
group.setId(0L);
group.setName("admin");
User guestUser = new User();
guestUser.setId(2L);
guestUser.setName("guest");
User rootUser = new User();
rootUser.setId(3L);
rootUser.setName("root");
group.addUser(guestUser);
group.addUser(rootUser);
// toJSONString方法
String jsonString = JSON.toJSONString(group);
System.out.println(jsonString);
输出:
{"id":0,"name":"admin","users":[{"id":2,"name":"guest"},{"id":3,"name":"root"}]}
解码,JSON转换为Java对象:
String jsonString = ...;
// parseObject方法
Group group = JSON.parseObject(jsonString, Group.class);
fastjson封装了JSON类的toJSONString()
和parseObject()
方法,来实现Java对象和JSON之间相互转换。
在JSON转换为Java对象时,传入的String可以写在单行:
String jsonString = "{\"id\":0,\"name\":\"admin\",\"users\":[{\"id\":2,\"name\":\"guest\"},{\"id\":3,\"name\":\"root\"}]}";
也可以格式化后复制粘贴为多行:
String jsonString = "{\n" +
" \"id\":0,\n" +
" \"name\":\"admin\",\n" +
" \"users\":[\n" +
" {\n" +
" \"id\":2,\n" +
" \"name\":\"guest\"\n" +
" },\n" +
" {\n" +
" \"id\":3,\n" +
" \"name\":\"root\"\n" +
" }\n" +
" ]\n" +
"}";
单行和多行都能够转换成功。
字符串转JSON提取数据
除了Java对象和JSON相互转换以外,还有个对于测试来说,更为常见的使用场景:把字符串转为JSON,提取其中某些字段的数据。
这也很简单,parseObject()方法不传第二个参数,返回的就是一个JSONObject对象:
String jsonString = ...;
// parseObject方法
JSONObject jsonObj = JSON.parseObject(jsonString);
JSONObject提供了一系列不同数据类型的get()方法来提取数据:
对号入座提取想要的数据就可以了。
参考资料:
fastjson源码 https://github.com/alibaba/fastjson
fastjson详解 https://blog.csdn.net/cold___play/article/details/124525519