专栏名称: 芋道源码
纯 Java 源码分享公众号,目前有「Dubbo」「SpringCloud」「Java 并发」「RocketMQ」「Sharding-JDBC」「MyCAT」「Elastic-Job」「SkyWalking」「Spring」等等
目录
相关文章推荐
芋道源码  ·  SpringBoot 实现任意文件在线预览功能 ·  17 小时前  
芋道源码  ·  1.8k ... ·  昨天  
芋道源码  ·  号称取代 Elasticsearch,太猛了! ·  昨天  
芋道源码  ·  一款轻量级的服务器监控神器,开箱即用! ·  2 天前  
Java编程精选  ·  不引入ES,如何利用 MySQL 实现模糊匹配 ·  3 天前  
51好读  ›  专栏  ›  芋道源码

解析JSON的这 6 种方案,真香!

芋道源码  · 公众号  · Java  · 2025-02-17 09:30

正文

👉 这是一个或许对你有用 的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入 芋道快速开发平台 知识星球。 下面是星球提供的部分资料:

👉 这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、 商城 、支付、工作流、大屏报表、微信公众号、 ERP CRM AI 大模型 等等功能:

  • Boot 多模块架构:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • Cloud 微服务架构:https://gitee.com/zhijiantianya/yudao-cloud
  • 视频教程:https://doc.iocoder.cn
【国内首批】支持 JDK 17/21 + SpringBoot 3.3、JDK 8/11 + Spring Boot 2.7 双版本

来源:苏三说技术


在 Java 开发中,解析 JSON 是一个非常常见的需求。

不管是和前端交互、调用第三方接口,还是处理配置文件,几乎都绕不开 JSON。

这篇文章总结了6种主流的 JSON 解析方法,希望对你会有所帮助。

1. 使用 Jackson:业界标配

功能特点

  • 强大的序列化和反序列化 :支持将 JSON 字符串转为 Java 对象,也支持将 Java 对象转换为 JSON。
  • 支持复杂结构 :处理嵌套对象、数组、泛型等场景非常轻松。
  • 支持注解 :如 @JsonIgnore @JsonProperty 等,能精细控制序列化与反序列化的行为。
  • 性能高 :Jackson 的性能非常出色,是很多企业级项目的首选。

代码示例

1. JSON 转对象(反序列化)

import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1,\"name\":\"张三\"}";

        ObjectMapper objectMapper = new ObjectMapper();
        User user = objectMapper.readValue(json, User.class);
        System.out.println(user.getName()); // 输出:张三
    }
}

class User {
    private int id;
    private String name;

    // Getters 和 Setters 省略
}

2. 对象转 JSON(序列化)

User user = new User();
user.setId(1);
user.setName("李四");

ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(user);
System.out.println(json); // 输出:{"id":1,"name":"李四"}

高级功能

  • 日期格式化 @JsonFormat(pattern = "yyyy-MM-dd")
  • 忽略字段 @JsonIgnore
  • 重命名字段 @JsonProperty("custom_name")

优缺点

优点 缺点
功能全面,支持复杂场景 配置较多,学习成本稍高
性能高,社区活跃,企业级项目首选 过于强大,部分功能用不上
丰富的注解支持,便于控制序列化行为 库体积较大,对于小型项目略显笨重

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

2. 使用 Gson:轻量好用

功能特点

  • 轻量级 :Gson 的设计非常简洁,代码量少,适合中小型项目。
  • 支持泛型 :可以轻松解析带泛型的 JSON。
  • 注解控制 :支持通过注解控制序列化行为,如 @Expose
  • 易扩展 :通过自定义序列化器和反序列化器,可以处理复杂的场景。

代码示例

1. JSON 转对象






    
import com.google.gson.Gson;

public class GsonExample {
    public static void main(String[] args) {
        String json = "{\"id\":1,\"name\":\"王五\"}";

        Gson gson = new Gson();
        User user = gson.fromJson(json, User.class);
        System.out.println(user.getName()); // 输出:王五
    }
}

2. 对象转 JSON

User user = new User();
user.setId(2);
user.setName("赵六");

Gson gson = new Gson();
String json = gson.toJson(user);
System.out.println(json); // 输出:{"id":2,"name":"赵六"}

高级功能

  • 忽略字段 @Expose

    @Expose
    private String name;
  • 自定义序列化器/反序列化器

    Gson gson = new GsonBuilder()
            .registerTypeAdapter(CustomClass.class, new CustomSerializer())
            .create();

优缺点

优点 缺点
轻量级,简单易用,适合中小型项目 性能稍逊于 Jackson
学习曲线平滑,新手容易上手 功能不如 Jackson 丰富
提供良好的扩展能力 复杂对象处理起来较为麻烦

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

3. 使用 FastJSON:高性能

功能特点

  • 性能优异 :FastJSON 的解析速度非常快,适合大数据量场景。
  • 支持动态字段 :可以轻松处理动态 JSON 数据。
  • 强大的类型支持 :支持嵌套对象、泛型、数组等复杂结构。
  • 注解控制 :类似 Jackson 和 Gson,支持注解控制字段的序列化和反序列化。

代码示例

1. JSON 转对象

import com.alibaba.fastjson.JSON;

public class FastJsonExample {
    public static void main(String[] args) {
        String json = "{\"id\":1,\"name\":\"小明\"}";

        User user = JSON.parseObject(json, User.class);
        System.out.println(user.getName()); // 输出:小明
    }
}

2. 对象转 JSON

User user = new User();
user.setId(3);
user.setName("小红");

String json = JSON.toJSONString(user);
System.out.println(json); // 输出:{"id":3,"name":"小红"}

高级功能

  • 自动驼峰转下划线

    JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
  • 动态字段解析

    Map map = JSON.parseObject(json, Map.class);

优缺点

优点 缺点
性能极高,解析速度快 曾有历史安全漏洞的争议
支持复杂的动态字段解析 社区活跃度稍逊于 Jackson 和 Gson
功能全面,适合大规模数据处理场景 配置选项和 API 比较多,稍显复杂

4. 使用 JsonPath:快速提取嵌套字段

功能特点

  • 高效字段提取 :通过路径表达式(类似 XPath)快速提取嵌套字段。
  • 灵活性强 :支持动态字段和条件过滤。
  • 轻量级 :专注于字段提取,功能简单明确。

代码示例

import com.jayway.jsonpath.JsonPath;

public class JsonPathExample {
    public static void main(String[] args) {
        String json = """
            {
                "
store": {
                    "
book": [
                        {"
title": "1", "price": 10},
                        {"
title": "2", "price": 20}
                    ]
                }
            }
        "
"";

        // 提取第一个书籍的标题
        String title = JsonPath.read(json, "$.store.book[0].title");
        System.out.println(title); // 输出:书1

        // 提取所有书籍价格
        List prices = JsonPath.read(json, "$.store.book[*].price");
        System.out.println(prices); // 输出:[10, 20]
    }
}

优缺点

优点 缺点
字段提取简洁高效 不支持序列化和反序列化
动态字段处理能力强 依赖 JsonPath 语法
适合快速提取嵌套字段 不适合全量 JSON 转换

5. 使用 org.json:轻量工具类

功能特点

  • 轻量级 :核心是一个工具类,适合简单场景。
  • 构造和解析简单 :适合快速创建 JSON 或提取字段。
  • 灵活性一般 :不支持复杂对象映射。

代码示例

import org.json.JSONObject;

public class OrgJsonExample {
    public static void main(String[] args) {
        String json = "{\"id\":1,\"name\":\"张三\"}";

        // 提取字段
        JSONObject jsonObject = new JSONObject(json);
        System.out.println(jsonObject.getString("name")); // 输出:张三

        // 构造 JSON
        JSONObject newJson = new JSONObject();
        newJson.put("id"2);
        newJson.put("name""李四");
        System.out.println(newJson.toString()); // 输出:{"id":2,"name":"李四"}
    }
}

优缺点

优点 缺点
轻量级,适合简单场景 不支持复杂嵌套对象
使用简单,学习成本低 功能简单,扩展性差






请到「今天看啥」查看全文