As we All Know,Json is very important in our demo。
但是java里面没有JSON啊。
所以我们可以引入阿里开源的JSON即FastJson
XML
<!-- FastJSON 1.x 主流版本 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<!-- FastJSON2(新版,性能更强)包名不同:com.alibaba.fastjson2 -->
FastJSON 三大核心:JSON / JSONObject / JSONArray
一、分别是什么
1. JSONObject
对应 JSON 里的 {键值对},底层是 Map<String, Object> 存储:key-value 键值结构,key 字符串,value 可以是数字、字符串、布尔、JSONObject、JSONArray。
2. JSONArray
对应 JSON 里的 [元素1,元素2],底层是 List<Object> 存储:一组有序元素,元素可以是数字、字符串、JSONObject、嵌套 JSONArray。
3. JSON
工具静态类,不是承载数据的容器,只提供序列化、反序列化静态方法。 负责:字符串 ↔ JSONObject/JSONArray ↔ Java 实体 互相转换。
二、三者作用
- JSONObject:灵活封装单个 JSON 对象,动态增删字段、读取指定 key 的值;
- JSONArray:封装一组 JSON 数据,循环遍历多条对象;
- JSON:转换器,负责字符串和上面两种容器、Java 实体互相解析转换。
| 类名 | 对应 JSON 格式 | 底层结构 | 核心特点 |
|---|---|---|---|
| JSONObject | { "id":1, "name":"xx" } |
Map | 键值存储,通过 key 取值 |
| JSONArray | [ {...}, {...} ] |
List | 有序集合,通过下标遍历 |
| JSON | 无对应格式 | 纯静态工具类 | 只做转换,不存数据 |
四、分别什么时候用(场景区分)
1. 什么时候用 JSONObject
出现单个对象、键值结构、字段不固定时使用:
- 组装接口统一返回体
{"code":200,"msg":"成功","data":{}}; - 解析第三方接口返回的单个对象报文;
- Mysql JSON 字段读写,存储扩展属性;
- 需要动态新增 / 删除 / 修改某个 key,实体类不方便修改字段;
- 嵌套 json 里的子对象,如
data.user。
示例场景:
XML
{
"code": 200,
"user": { "uid": 1001, "nick": "小明" }
}
// user 这一层单独拿出来就是 JSONObject
2. 什么时候用 JSONArray
出现列表、多条数据、中括号数组时使用:
- 分页列表返回,多条数据集合;
- 解析接口返回数组
[{"id":1},{"id":2}]; - 批量数据、多组对象循环处理;
- 嵌套数组,如
data.orderList。
示例场景:
XML
{
"list": [
{"id":1,"title":"订单1"},
{"id":2,"title":"订单2"}
]
}
// list 这一层是 JSONArray
3. 什么时候用 JSON(工具类)
只要涉及字符串和对象互相转换,必须用它:
- JSON 字符串 → JSONObject / JSONArray / Java 实体:
parseObject / parseArray - JSONObject / 实体 / 集合 → JSON 字符串:
toJSONString() - JSON 数组直接转 List <实体>:
parseArray(str, User.class)
常见操作:
XML
// 字符串转对象
JSONObject obj = JSON.parseObject(jsonStr);
// 对象转字符串
String str = JSON.toJSONString(obj);
// 字符串转实体
User user = JSON.parseObject(str, User.class);
五、搭配使用完整案例(最常用组合)
java
// 1. JSON工具把字符串解析成顶层JSONObject
String respStr = "{\"code\":200,\"data\":[{\"id\":1},{\"id\":2}]}";
JSONObject root = JSON.parseObject(respStr);
// 2. 从对象里取出数组(JSONArray)
JSONArray dataList = root.getJSONArray("data");
// 3. 循环数组,取出每一条JSONObject
for (int i = 0; i < dataList.size(); i++) {
JSONObject item = dataList.getJSONObject(i);
Integer id = item.getInteger("id");
}
六、极简总结
- 单个
{}→ JSONObject; - 一组
[]→ JSONArray; - 字符串、实体、上面两个容器互相转换 → JSON 工具类;
- 结构固定写实体类,结构动态、字段不确定、解析第三方报文,再用 JSONObject + JSONArray。