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。
相关推荐
PixelBai17 小时前
JSON查看器实际应用场景案例
json
田里的水稻18 小时前
EP_XML\JSON配置文件和YAML
xml·运维·人工智能·机器人·自动驾驶·json
耍酷的魔镜1 天前
核心设计理念:5W2H、JSON-LD 与通用知识图谱
人工智能·json·知识图谱
自信的未来1 天前
JSON 工具|Web Worker 工程化打包 + 语法自动修复 + 多语言代码生成实战
java·前端·json
墨神谕2 天前
JSON-RPC 2.0
网络协议·rpc·json
PixelBai2 天前
什么是 JSON 验证工具?
json
码农学院2 天前
电商零售品牌的6个技术信号——从JSON-LD结构化数据到llms.txt,让AI搜索主动推荐你的产品
人工智能·json·零售
月走乂山2 天前
DeepSeek 对话记录一键导出:零依赖 Tampermonkey 脚本(支持 JSON/Markdown/ZIP)
json·油猴脚本·tampermonkey·数据导出·deepseek·对话记录·用户脚本
前网易架构师-高司机2 天前
带标注的打电话识别数据集,识别率98.9%,9723张图,支持yolo,coco json,voc xml,文末有模型训练代码
yolo·json·手机·数据集·打电话