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。
相关推荐
小疯仔11 小时前
轨迹在地图上“漂“了 500 米?一文吃透 WGS-84→GCJ-02 坐标转换引擎(GPX→JSON 实战源码剖析)
小程序·json·notepad++
Flynt13 小时前
"只输出 JSON"根本不够:LLM 结构化输出的坑,我实测了 60 次调用
llm·json
她说..1 天前
MySQL 与 Java 的 JSON 数据处理
java·mysql·json·springboot
牛油果子哥q2 天前
C++对接LLM完整工程:异步HTTP请求、JSON解析、超时容错、重连兜底
c++·http·json
小刘在重生~2 天前
Django|Ajax 入门、JSON 返回、ECharts 图表、文件上传完整笔记
ajax·django·json
谢斯4 天前
[unity]如何在unity中添加newtonsoft-json
unity·json·游戏引擎
2601_962066935 天前
短视频批量制作怎么做?2026年用 huasheng-cli 的 --json 与退出码,一张选题表批量出片
json·音视频
oliver_sys_log6 天前
老项目 json-lib 2.4 JSONTokener 精度丢失问题排查
json
IT_Octopus6 天前
JSON 日志里的 `{“$ref“:“$.xxx“}`:从 fastjson 兼容包到原生 fastjson2 的迁移实录
开发语言·python·json
数据狐(Datafox)6 天前
mercadolibre.item_get 工程实战:美客多商品详情API技术解析与落地应用
java·人工智能·mysql·json