fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
Maven
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.2</version>
</dependency>
Fastjson版本<= 1.2.68有反序列化漏洞,建议使用最新版本。
1.对象转json字符串
String json = JSON.toJSONString(user); //序列化
2.json字符串转对象
User user = JSON.parseObject(json,User.class);//反序列化
3.jsonObject(json对象)转对象
User user = JSON.toJavaObject(jsonObject,User.class);
4.对象转jsonObject
JSONObject jsonObject = (JSONObject)JSON.toJSON(User);
源码:
public static Object toJSON(Object javaObject) {
if (javaObject instanceof JSON) {
return javaObject;
} else {
String str = toJSONString(javaObject);
Object object = parse(str);
return object instanceof List ? new JSONArray((List)object) : object;
}
}
通过源码的else代码块可以看出,先将对象转为json字符串,然后在转为Object对象。
同以下代码一样:
//先将对象转成字符串
String json = JSON.toJSONString(user);
//将json字符串转json对象
JSONObject jsonObject = JSONObject.parseObject(json);
jsonObject获取值:
int id = jsonObject.getIntValue("id);
String name = jsonObject.getString("name);
5.json转Map
Map<String,Object> map = JSONObject.parseObject(json,Map.class);
json转Map和json转对象一样。map也是一个对象。
JSONObject 继承了JSON,所以这里用JSON.parseObject()与JSONObject.parseObject()的作用一样
User user = JSON.parseObject(json,User.class);
User user = JSONObject.parseObject(json,User.class);
6.map转json对象
JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(map));
map转json对象与对象转json对象一样,同标题4。也是先将map对象转为json字符串,然后再转为jsonObject对象
7.json数组转list
List<Map> listMaps = JSONArray.parseArray(JSON.toJSONString(data),Map.class);
List<Map> mapsList = JSONObject.parseArray(JSON.toJSONString(data), Map.class);
8.jsonObject转jsonString
String jsonString = JSON.toJSONString(jsonObject);
9.jsonString转jsonObject
JSONObject jsonObject = JSON.parseObject(jsonString);
10.jsonString转jsonArray
JSONArray jArray=JSON.parseArray(JSON.toJSONString(userListJson));
11.jsonArray转list对象
List<User> userList = JSON.parseArray(JSON.toJSONString(jsonArray),User.class);
总结:
1. 对象、集合、数组、map转json之前,都要先转为json字符串。
2. json之间的转换也是先把要转换的数据转换为json字符串再做转换。
3. json转对象、list对象要指明转换的javaBean(user.class)。