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。
相关推荐
SeaTunnel3 小时前
从 JSON 到 JSONL,Apache SeaTunnel 如何解决HTTP 大数据传输的内存难题?
http·开源·json·apache·数据集成·seatunnel
++==14 小时前
JSON和Python的 四种核心容器
python·json
lf13210272 天前
用 JSON Schema 管装修节点记录:从照片台账到可校验工程数据
网络·数据库·人工智能·经验分享·物联网·json·智能家居
丰锋ff2 天前
7.2Qt中Json的操作
开发语言·qt·json
bugcome_com2 天前
JWT 知识小课堂:从入门到精通,一文吃透 JSON Web Token
前端·json
ccino .3 天前
awvs_json_word.py 使用说明手册
json·word
richard_yuu3 天前
JSON vs XML vs 二进制:3种序列化终极选型
xml·c++·qt·学习·json
用户7783366132114 天前
SERP 返回 JSON 用 Pydantic 强校验:类型安全解析
json
灵析表格4 天前
灵析表格财务函数深度实用性分析与实操教程
开发语言·ai·json·excel·wps
青 春 记 忆4 天前
零基础入门python07:让程序记住数据——JSON文件和异常处理
开发语言·windows·python·json·python3.11