杰瑞科技汇

Java对象转JSON需哪些jar包?

主流 Java JSON 库对比

库名称 特点 易用性 性能 推荐场景
Jackson 功能最全、性能最好、社区最活跃,是事实上的行业标准。 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ 首选推荐,几乎所有 Spring Boot 项目默认集成,适用于几乎所有场景。
Gson Google 出品,API 简洁,对复杂对象和泛型支持好。 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ Android 开发首选,如果你需要一个极其简单、稳定的库,Gson 是很好的选择。
Fastjson 阿里巴巴开源,解析速度极快,在国内使用非常广泛。 ⭐⭐⭐ ⭐⭐⭐⭐⭐ 对性能要求极高的场景,但需注意其历史版本存在安全漏洞,建议使用最新版 1.2.x 或 2.x。
JSON-P / JSON-P Java EE 标准(现 Jakarta EE),提供一种标准化的 API,不依赖具体实现。 ⭐⭐ ⭐⭐ 当你的项目需要保持与 Java EE 标准的兼容性,不希望引入第三方特定库时。

Jackson (最推荐)

Jackson 是功能最强大、性能最好的 JSON 处理库,也是 Spring Boot 的默认选择。

Java对象转JSON需哪些jar包?-图1
(图片来源网络,侵删)

核心概念

  • ObjectMapper: 核心类,负责所有 JSON 的读写操作。
  • @JsonProperty: 用于指定 Java 对象属性与 JSON 字段的映射关系。
  • @JsonIgnore: 用于忽略某个属性,不进行序列化。

Maven 依赖

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version> <!-- 建议使用最新版本 -->
</dependency>

Gradle 依赖

implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2'

代码示例

准备一个 Java 对象

import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
    private String name;
    private int age;
    // 使用 @JsonProperty 指定 JSON 字段名
    @JsonProperty("email_address")
    private String email;
    // 使用 @JsonIgnore 忽略该字段
    @JsonIgnore
    private String password;
    // 构造器、Getter 和 Setter 是必须的
    public User() {}
    public User(String name, int age, String email, String password) {
        this.name = name;
        this.age = age;
        this.email = email;
        this.password = password;
    }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
}

执行转换

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonExample {
    public static void main(String[] args) {
        // 1. 创建 ObjectMapper 实例
        ObjectMapper objectMapper = new ObjectMapper();
        // 2. 创建一个 User 对象
        User user = new User("张三", 30, "zhangsan@example.com", "123456");
        try {
            // 3. 将对象转换为 JSON 字符串
            // 默认格式化,可读性差
            String jsonString = objectMapper.writeValueAsString(user);
            System.out.println("默认 JSON: " + jsonString);
            // 4. 将对象格式化为美观的 JSON 字符串 (带缩进)
            String prettyJsonString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(user);
            System.out.println("美化 JSON:\n" + prettyJsonString);
            // 5. 将 JSON 字符串转换回对象 (反序列化)
            User deserializedUser = objectMapper.readValue(jsonString, User.class);
            System.out.println("反序列化后的对象: " + deserializedUser.getName());
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
}

输出结果:

默认 JSON: {"name":"张三","age":30,"email_address":"zhangsan@example.com"}
美化 JSON:
{
  "name" : "张三",
  "age" : 30,
  "email_address" : "zhangsan@example.com"
}

Gson

Gson 由 Google 开发,以其简洁的 API 而闻名,尤其是在处理泛型时非常方便。

Java对象转JSON需哪些jar包?-图2
(图片来源网络,侵删)

Maven 依赖

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version> <!-- 建议使用最新版本 -->
</dependency>

Gradle 依赖

implementation 'com.google.code.gson:gson:2.10.1'

代码示例

准备 Java 对象 Gson 也支持注解,如 @SerializedName (对应 Jackson 的 @JsonProperty)。

import com.google.gson.annotations.SerializedName;
public class User {
    private String name;
    private int age;
    @SerializedName("email_address")
    private String email;
    // 构造器、Getter 和 Setter
    public User() {}
    public User(String name, int age, String email) {
        this.name = name;
        this.age = age;
        this.email = email;
    }
    // ... 省略 Getter 和 Setter
}

执行转换

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class GsonExample {
    public static void main(String[] args) {
        // 1. 创建 Gson 实例
        // 使用 GsonBuilder 可以配置,例如美化输出
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        // 2. 创建 User 对象
        User user = new User("李四", 25, "lisi@example.com");
        // 3. 将对象转换为 JSON 字符串
        String jsonString = gson.toJson(user);
        System.out.println("Gson JSON:\n" + jsonString);
        // 4. 将 JSON 字符串转换回对象
        User deserializedUser = gson.fromJson(jsonString, User.class);
        System.out.println("反序列化后的对象: " + deserializedUser.getName());
    }
}

Fastjson (阿里)

Fastjson 以其极致的解析速度著称,在国内很多大型互联网公司中被广泛使用。注意: 旧版本(如 1.2.x 之前)存在高危安全漏洞,请务必使用 2.83+x 版本。

Maven 依赖 (推荐使用 2.x 版本)

<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.40</version> <!-- 建议使用最新 2.x 版本 -->
</dependency>

代码示例

Fastjson 的 API 非常直接。

Java对象转JSON需哪些jar包?-图3
(图片来源网络,侵删)
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONWriter;
public class FastjsonExample {
    public static void main(String[] args) {
        // 1. 创建 User 对象
        User user = new User("王五", 28, "wangwu@example.com");
        // 2. 将对象转换为 JSON 字符串
        // JSONWriter.Feature.PrettyFormat 用于美化输出
        String jsonString = JSON.toJSONString(user, JSONWriter.Feature.PrettyFormat);
        System.out.println("Fastjson JSON:\n" + jsonString);
        // 3. 将 JSON 字符串转换回对象
        User deserializedUser = JSON.parseObject(jsonString, User.class);
        System.out.println("反序列化后的对象: " + deserializedUser.getName());
    }
}

如何选择?

场景 推荐库 理由
新项目,尤其是 Spring Boot 项目 Jackson 无需额外配置,开箱即用,性能和功能都是顶级。
Android 开发 Gson 早期被集成在 Android 框架中,API 简单,体积小。
对性能有极致要求,且能控制版本 Fastjson (2.x) 解析速度非常快,但需要关注其安全更新。
需要遵循 Java EE 标准 JSON-P 标准化,但 API 相对繁琐,不常用。

对于绝大多数 Java 后端开发,Jackson 是最安全、最不会出错的选择,如果你在做一个 Android 应用,或者偏爱 Google 的生态,Gson 是一个很好的备选,如果你在一家国内互联网公司,并且对性能有严苛要求,Fastjson 2.x 值得考虑。

分享:
扫描分享到社交APP
上一篇
下一篇