Java里的Json

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 实体 互相转换。

二、三者作用

  1. JSONObject:灵活封装单个 JSON 对象,动态增删字段、读取指定 key 的值;
  2. JSONArray:封装一组 JSON 数据,循环遍历多条对象;
  3. JSON:转换器,负责字符串和上面两种容器、Java 实体互相解析转换。
类名 对应 JSON 格式 底层结构 核心特点
JSONObject { "id":1, "name":"xx" } Map 键值存储,通过 key 取值
JSONArray [ {...}, {...} ] List 有序集合,通过下标遍历
JSON 无对应格式 纯静态工具类 只做转换,不存数据

四、分别什么时候用(场景区分)

1. 什么时候用 JSONObject

出现单个对象、键值结构、字段不固定时使用:

  1. 组装接口统一返回体 {"code":200,"msg":"成功","data":{}}
  2. 解析第三方接口返回的单个对象报文;
  3. Mysql JSON 字段读写,存储扩展属性;
  4. 需要动态新增 / 删除 / 修改某个 key,实体类不方便修改字段;
  5. 嵌套 json 里的子对象,如 data.user

示例场景:

XML 复制代码
{
  "code": 200,
  "user": { "uid": 1001, "nick": "小明" }
}
// user 这一层单独拿出来就是 JSONObject

2. 什么时候用 JSONArray

出现列表、多条数据、中括号数组时使用:

  1. 分页列表返回,多条数据集合;
  2. 解析接口返回数组 [{"id":1},{"id":2}]
  3. 批量数据、多组对象循环处理;
  4. 嵌套数组,如 data.orderList

示例场景:

XML 复制代码
{
  "list": [
    {"id":1,"title":"订单1"},
    {"id":2,"title":"订单2"}
  ]
}
// list 这一层是 JSONArray

3. 什么时候用 JSON(工具类)

只要涉及字符串和对象互相转换,必须用它:

  1. JSON 字符串 → JSONObject / JSONArray / Java 实体:parseObject / parseArray
  2. JSONObject / 实体 / 集合 → JSON 字符串:toJSONString()
  3. 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");
}

六、极简总结

  1. 单个 {} → JSONObject;
  2. 一组 [] → JSONArray;
  3. 字符串、实体、上面两个容器互相转换 → JSON 工具类;
  4. 结构固定写实体类,结构动态、字段不确定、解析第三方报文,再用 JSONObject + JSONArray。
相关推荐
SQDN11 小时前
Chatbox 1.22.1 获取不到模型?先验 /models,再对齐精确 model ID
人工智能·测试工具·机器学习·chatgpt·json
SunnyDays101117 小时前
Python 将 Excel(XLS/XLSX)转换为 JSON:导出工作簿、工作表、单元格区域与自定义 JSON 结构
python·json·excel·excel 转 json·导出 excel 到 json·xlsx 转 json·xls 转 json
刘小八19 小时前
Spring AI 结构化输出:稳定生成可校验的业务 JSON
人工智能·spring·json
CodexDave2 天前
Python 自动化接单实战(一):把 CSV 需求做成配置驱动解析器
java·python·自动化·json·数据清洗·python自动化·csv处理
今夜有雨.3 天前
C++JSON 解析器
c++·笔记·后端·学习·json
用户657094163303 天前
Kotlin Moshi库 全面使用指南
json
海兰4 天前
【高速缓存】RedisVL 存储类型选择指南:Hash 与 JSON
人工智能·redis·算法·缓存·json·哈希算法
减瓦4 天前
Jackson 使用指南
java·spring boot·json
制造数据与AI践行者老蒋4 天前
离谱!PromptTemplate 遇上 JSON,花括号直接引发解析战争
数据库·microsoft·json
chenjingming6665 天前
JWT(JSON Web Token)有效期查看登录过期时间
json