一、fastjson简介
com.alibaba.fastjson
是阿里巴巴集团开发的一款高性能、功能完善的Java JSON库。它提供了丰富的API,可以轻松地将Java对象序列化为JSON字符串,或将JSON字符串反序列化为Java对象。fastjson广泛应用于各种Java Web应用、移动应用以及大数据处理场景,具有稳定、高效、易用等特点。在平时开发中,一般需要吧接口响应数据装换成json返回给前端,所以fastjson使用范围还是很广的,也很频繁,所以本文主要来介绍fastjson常用API。
二、Maven引入
首先需要在pom文件引入依赖,也就是在Maven项目中使用fastjson,只需在项目的pom.xml
文件中添加如下依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.37</version>
</dependency>
三、常用API详解
fastjson提供了简洁易用的API,支持将Java对象序列化为JSON字符串,以及将JSON字符串反序列化为Java对象。这一功能使得开发者能够轻松地在Java对象和JSON数据之间进行转换,满足前后端数据交互的需求。主要常用API如下:
1. 将对象序列化成JSON字符串
代码语言:java复制String com.alibaba.fastjson.JSON.toJSONString(Object object)
示例:
代码语言:java复制User user = new User("张三", 25);
String userJsonStr = JSON.toJSONString(user);
System.out.println(userJsonStr); // 输出:{"age":25,"name":"张三"}
注意:虽然示例中使用了JSONObject.toJSONString(user)
,但推荐使用JSON.toJSONString(object)
,因为JSON
类是fastjson
库的入口类,提供了更多功能和更好的兼容性。
2. 将JSON字符串反序列化成对象
代码语言:java复制<T> T com.alibaba.fastjson.JSON.parseObject(String text, Class<T> clazz)
示例:
代码语言:java复制String userJsonStr = "{"age":25,"name":"张三"}";
User user1 = JSON.parseObject(userJsonStr, User.class);
System.out.println(user1); // 输出:User{name='张三', age=25}
以上两钟其实算是开发中比较常用的了,对象转json字符串,json字符串转对象。
3. 将JSON字符串反序列化成JSON对象
com.alibaba.fastjson.JSONObject com.alibaba.fastjson.JSON.parseObject(String text)
方法用于将JSON字符串反序列化为JSONObject
对象。
示例:
代码语言:java复制String userJsonStr = "{"age":25,"name":"张三"}";
JSONObject userJsonObj = JSON.parseObject(userJsonStr);
System.out.println(userJsonObj); // 输出:{"age":25,"name":"张三"}
首先定义了一个JSON字符串,然后使用JSON.parseObject()
方法将其反序列化为JSONObject
对象。输出的JSONObject
对象包含了JSON字符串中的所有键值对。
4. 根据key得到JSON中的JSON数组
com.alibaba.fastjson.JSONArray com.alibaba.fastjson.JSONObject.getJSONArray(String key)
方法用于从JSONObject
对象中获取指定key对应的JSON数组。
String userJsonStr = "{"hobbies":["篮球","足球"]}";
JSONObject userJsonObj = JSON.parseObject(userJsonStr);
JSONArray hobbies = userJsonObj.getJSONArray("hobbies");
System.out.println(hobbies); // 输出:["篮球","足球"]
首先定义了一个包含JSON数组的JSON字符串,然后使用JSON.parseObject()
方法将其反序列化为JSONObject
对象。接着,使用getJSONArray()
方法获取了hobbies
key对应的JSON数组。
5. 根据下标拿到JSON数组的JSON对象
com.alibaba.fastjson.JSONObject com.alibaba.fastjson.JSONArray.getJSONObject(int index)
方法用于从JSONArray
对象中获取指定下标的JSON对象。这个方法接受一个int
类型的下标作为参数,并返回一个JSONObject
对象。示例:
String userJsonStr = "{"hobbies":[{"name":"篮球","level":"业余"},{"name":"足球","level":"专业"}]}";
JSONObject userJsonObj = JSON.parseObject(userJsonStr);
JSONArray hobbies = userJsonObj.getJSONArray("hobbies");
JSONObject basketball = hobbies.getJSONObject(0);
System.out.println(basketball); // 输出:{"level":"业余","name":"篮球"}
在这个示例中,定义了一个包含JSON对象的JSON数组,然后使用JSON.parseObject()
方法将其反序列化为JSONObject
对象。使用getJSONArray()
方法获取了hobbies
key对应的JSON数组,最后使用getJSONObject()
方法获取了数组中第一个JSON对象。
6. 根据key拿到JSON的字符串值
String com.alibaba.fastjson.JSONObject.getString(String key)
方法用于从JSONObject
对象中获取指定key对应的字符串值。示例:
String userJsonStr = "{"name":"张三","age":"25"}";
JSONObject userJsonObj = JSON.parseObject(userJsonStr);
String name = userJsonObj.getString("name");
System.out.println(name); // 输出:张三
上述代码定义了一个包含字符串值的JSON字符串,然后使用JSON.parseObject()
方法将其反序列化为JSONObject
对象。然后使用getString()
方法获取了name
key对应的字符串值。
7. 根据key拿到JSON的int值
int com.alibaba.fastjson.JSONObject.getIntValue(String key)
方法用于从JSONObject
对象中获取指定key对应的整数值。这个方法接受一个String
类型的key作为参数,并返回一个int
类型的值。代码案例如下:
String userJsonStr = "{"name":"张三","age":25}";
JSONObject userJsonObj = JSON.parseObject(userJsonStr);
int age = userJsonObj.getIntValue("age");
System.out.println(age); // 输出:25
在案例代码中先定义了一个包含整数值的JSON字符串,然后使用JSON.parseObject()
方法将其反序列化为JSONObject
对象。然后使用getIntValue()
方法获取了age
key对应的整数值。
8. 根据key拿到JSON的boolean值
boolean com.alibaba.fastjson.JSONObject.getBooleanValue(String key)
方法用于从JSONObject
对象中获取指定key对应的布尔值。如下代码:
String userJsonStr = "{"name":"张三","isStudent":false}";
JSONObject userJsonObj = JSON.parseObject(userJsonStr);
boolean isStudent = userJsonObj.getBooleanValue("isStudent");
System.out.println(isStudent); // 输出:false
这是其实平时使用也是比较少的,大家可以了解一下就行。
以上就是fastjson简介及常用API,其实也不用强行记忆,平时开发孰能生巧。
我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!