- FastJson 介绍
在前端与后端、服务与服务之间的数据传输,经常会遇到一些很不好处理的Json格式数据;Json是以跨语言的形式,在数据交互之间频繁使用;其中Json有Fastjson、Jackson、Gson常用的开源库,这里我们主要介绍FastJson。
FastJson是阿里巴巴开源库,用于对JSON格式的数据进行解析和打包。
FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。
FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库 - 引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<!-- 建议使用1.2.83,以下会出现反序列化漏洞 -->
<version>版本根据自己需要</version>
</dependency>
- 常用API
public static final Object parse(String text);
public static final JSONObject parseObject(String text);
public static final <T> T parseObject(String text, Class<T> clazz);
public static final JSONArray parseArray(String text);
public static final <T> List<T> parseArray(String text, Class<T> clazz);
public static final String toJSONString(Object object);
public static final String toJSONString(Object object, boolean prettyFormat);
public static final Object toJSON(Object javaObject);
- 使用
a. Json转换对象
@Data
public class Result implements Serializable {
private static final long serialVersionUID = -7058259606180978358L;
private Integer code;
private LocalDateTime time;
private List<UserContent> message;
private String content;
private boolean type;
}
@Data
public class UserContent implements Serializable {
private static final long serialVersionUID = 929634563977013080L;
private String username;
}
例:
{
"code":200,
"content":"1",
"message":[
{
"username":"小白"
}
],
"time":1679244854532,
"type":true
}
使用JSONObject.parseObject():
JSONObject jsonObject = JSONObject.parseObject(str);
String code = jsonObject.getString("code");
String getString(String key);
// 获取json中的message数组
JSONArray jsonArray = jsonObject.getJSONArray("message");
// 获取json中的content String类型
String content = jsonObject.getString("content");
// 获取json中的code int类型
int code = jsonObject.getIntValue("code");
// 获取json中的type boolean类型
boolean type = jsonObject.getBoolean("type");
Json转换为实体类:
Result result = JSONObject.parseObject(str, Result.class);
// 当str是一个json数组时
List<Result> results = JSONObject.parseArray(str, Result.class);
b. 对象转换为Json
public void test() {
ArrayList<UserContent> userContents = new ArrayList<>();
UserContent userContent = new UserContent();
userContent.setUsername("小白");
userContents.add(userContent);
Result result = new Result();
result.setCode(200);
result.setContent("1");
result.setTime(LocalDateTime.now());
result.setMessage(userContents);
result.setType(true);
String s = JSONObject.toJSONString(result);
System.out.println(s);
}
// 结果:
{
"code":200,
"content":"1",
"message":[
{
"username":"小白"
}
],
"time":1679244854532,
"type":true
}