方式一:使用阿里的 Fastjson 解析(⭐⭐⭐⭐⭐ 推荐,最常用,最简单)

✅ 优点

  1. 语法极度简洁,一行代码获取指定字段,开发效率最高;
  2. API 通俗易懂,学习成本极低;
  3. 支持 单层 JSON、嵌套 JSON、数组 JSON 所有格式;
  4. 是国内 Java 开发的事实标准,90% 的项目都在用(阿里、京东、保险行业等);
  5. 完美适配你的场景:kafka 异步消费的 JSON 消息,用 Fastjson 解析字段最快。

✅ 步骤 1:引入依赖(Maven)

<!-- 阿里Fastjson核心依赖,只需这一个,版本建议1.2.83+(修复漏洞) -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.83</version>
</dependency>

✅ 步骤 2:完整使用示例(全部场景,复制即用)

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class FastjsonTest {
    public static void main(String[] args) {
        // ============ 1. 解析【单层JSON】获取字段 ============
        String simpleJson = "{\"name\":\"张三\",\"age\":28,\"gender\":\"男\",\"phone\":\"13800138000\",\"isVip\":true}";
        // 把JSON字符串转为JSONObject对象
        JSONObject simpleObj = JSON.parseObject(simpleJson);
        
        // 获取指定字段:语法 -> 对象.getString("字段名") / getInteger / getBoolean
        String name = simpleObj.getString("name"); // 字符串字段:张三
        Integer age = simpleObj.getInteger("age"); // 数字字段:28
        Boolean isVip = simpleObj.getBoolean("isVip"); // 布尔字段:true
        System.out.println("单层JSON解析结果:姓名=" + name + ",年龄=" + age + ",是否会员=" + isVip);

        // ============ 2. 解析【多层嵌套JSON】获取字段(重点,比如user.userName) ============
        String complexJson = "{\"orderId\":\"O10001\",\"user\":{\"userId\":1001,\"userName\":\"李四\",\"address\":\"北京市朝阳区\"},\"goods\":[{\"goodsId\":\"G001\",\"goodsName\":\"手机\",\"price\":5999}],\"totalPrice\":6298}";
        JSONObject complexObj = JSON.parseObject(complexJson);
        
        // ① 获取一级字段(直接获取)
        String orderId = complexObj.getString("orderId"); // O10001
        Integer totalPrice = complexObj.getInteger("totalPrice"); // 6298
        
        // ② 获取嵌套字段(核心:先获取内层JSONObject,再取值)
        JSONObject userObj = complexObj.getJSONObject("user"); // 获取user对应的内层JSON
        String userName = userObj.getString("userName"); // 李四
        String address = userObj.getString("address"); // 北京市朝阳区
        
        System.out.println("嵌套JSON解析结果:订单号=" + orderId + ",用户名=" + userName + ",总价=" + totalPrice);

        // ============ 3. 解析【JSON数组】获取字段(重点,比如goods数组里的元素) ============
        JSONArray goodsArray = complexObj.getJSONArray("goods"); // 获取goods数组
        
        // 方式A:遍历数组,获取每个元素的字段
        for (int i = 0; i < goodsArray.size(); i++) {
            JSONObject goodsObj = goodsArray.getJSONObject(i); // 数组的每个元素都是JSONObject
            String goodsName = goodsObj.getString("goodsName");
            Integer price = goodsObj.getInteger("price");
            System.out.println("数组元素:商品名=" + goodsName + ",价格=" + price);
        }
        
        // 方式B:获取数组指定下标元素的字段(比如获取第0个商品名称)
        String firstGoodsName = goodsArray.getJSONObject(0).getString("goodsName"); // 手机
        System.out.println("数组第一个商品名:" + firstGoodsName);
    }
}

✅ 关键 API 速记(Fastjson)

  • 字符串转 JSON 对象:JSON.parseObject(jsonStr) → 返回 JSONObject
  • 获取一级字段:jsonObj.getString("key")getInteger("key")getBoolean("key")
  • 获取嵌套对象:jsonObj.getJSONObject("嵌套key")
  • 获取 JSON 数组:jsonObj.getJSONArray("数组key")
  • 遍历数组:数组.size() + 数组.getJSONObject(index)

方式二:使用 SpringBoot 自带的 Jackson 解析(⭐⭐⭐⭐⭐ 推荐,无依赖,最优雅)

✅ 优点

  1. 零额外依赖:SpringBoot 项目中天生自带 Jackson,不需要引入任何 jar 包,直接用!
  2. 官方推荐:SpringBoot 的@RestController返回 JSON、@RequestBody接收 JSON,底层都是 Jackson;
  3. 两种使用姿势:① 像 Fastjson 一样按需获取字段转实体类获取字段(推荐业务开发);
  4. 性能优秀,稳定性极高,无漏洞风险,金融 / 保险等大厂核心项目首选。

✅ 缺点

按需获取字段的语法,比 Fastjson 多一行代码,仅此而已。

✅ 方式 :Jackson 按需获取指定字段(不转实体,适合临时解析 / 字段少的场景)

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Component;

// SpringBoot项目中可以直接注入ObjectMapper,普通Java项目new即可
@Component
public class JacksonTest {
    // 全局ObjectMapper对象,可复用
    private static final ObjectMapper objectMapper = new ObjectMapper();

    public static void main(String[] args) throws Exception {
        String simpleJson = "{\"name\":\"张三\",\"age\":28,\"gender\":\"男\"}";
        String complexJson = "{\"orderId\":\"O10001\",\"user\":{\"userName\":\"李四\"},\"goods\":[{\"goodsName\":\"手机\"}]}";

        // ============ 1. 解析单层JSON ============
        JsonNode simpleNode = objectMapper.readTree(simpleJson);
        String name = simpleNode.get("name").asText(); // 转字符串
        int age = simpleNode.get("age").asInt(); // 转数字
        System.out.println("Jackson单层解析:" + name + "," + age);

        // ============ 2. 解析多层嵌套JSON ============
        JsonNode complexNode = objectMapper.readTree(complexJson);
        String orderId = complexNode.get("orderId").asText();
        // 嵌套字段:链式调用 get("内层key")
        String userName = complexNode.get("user").get("userName").asText();
        System.out.println("Jackson嵌套解析:" + orderId + "," + userName);

        // ============ 3. 解析JSON数组 ============
        JsonNode goodsArray = complexNode.get("goods");
        // 遍历数组
        for (JsonNode goodsNode : goodsArray) {
            String goodsName = goodsNode.get("goodsName").asText();
            System.out.println("Jackson数组解析:" + goodsName);
        }
        // 获取数组指定下标的字段
        String firstGoods = goodsArray.get(0).get("goodsName").asText();
    }
}

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐