杰瑞科技汇

Java JSON字符串如何解析与使用?

处理 JSON 主要涉及两个方面:

Java JSON字符串如何解析与使用?-图1
(图片来源网络,侵删)
  1. 将 Java 对象(Object)转换为 JSON 字符串(序列化, Serialization)。
  2. 将 JSON 字符串解析为 Java 对象(反序列化, Deserialization)。

在 Java 生态中,有多个流行的库可以完成这项工作,其中最主流和推荐的是 JacksonGsonorg.json

下面我将分别介绍这三个库的使用方法,并给出完整的代码示例。


Jackson (推荐)

Jackson 是目前 Java 生态中最流行、功能最强大的 JSON 处理库,它被广泛用于 Spring Boot 等主流框架中。

Maven 依赖

在你的 pom.xml 文件中添加 Jackson 的依赖:

Java JSON字符串如何解析与使用?-图2
(图片来源网络,侵删)
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version> <!-- 建议使用最新版本 -->
</dependency>

核心类

  • ObjectMapper: Jackson 的核心类,负责所有的 JSON 序列化和反序列化操作。
  • @JsonProperty: 用于注解 Java 字段,指定其在 JSON 中的键名。
  • @JsonIgnore: 用于注解 Java 字段,表示该字段在序列化和反序列化时被忽略。

示例代码

我们创建一个 User 类作为示例。

User.java

import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
    private int id;
    private String name;
    // 使用 @JsonProperty 注解,指定 JSON 中的 key 为 "user_name"
    @JsonProperty("user_name")
    private String username;
    private boolean isActive;
    // 无参构造函数是反序列化时通常需要的
    public User() {
    }
    public User(int id, String name, String username, boolean isActive) {
        this.id = id;
        this.name = name;
        this.username = username;
        this.isActive = isActive;
    }
    // Getters and Setters
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }
    public boolean getActive() { return isActive; }
    public void setActive(boolean active) { isActive = active; }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", username='" + username + '\'' +
                ", isActive=" + isActive +
                '}';
    }
}

Main.java (Jackson 示例)

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
    public static void main(String[] args) {
        // 创建 ObjectMapper 实例
        ObjectMapper objectMapper = new ObjectMapper();
        // --- 1. 将 Java 对象转换为 JSON 字符串 (序列化) ---
        User user = new User(1, "张三", "zhangsan", true);
        try {
            // writeValueAsString() 方法将对象转为 JSON 字符串
            String jsonString = objectMapper.writeValueAsString(user);
            System.out.println("Java 对象 -> JSON 字符串:");
            System.out.println(jsonString);
            // 输出: {"id":1,"name":"张三","user_name":"zhangsan","isActive":true}
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        System.out.println("\n----------------------------------------\n");
        // --- 2. 将 JSON 字符串解析为 Java 对象 (反序列化) ---
        String jsonString = "{\"id\":2,\"name\":\"李四\",\"user_name\":\"lisi\",\"isActive\":false}";
        try {
            // readValue() 方法将 JSON 字符串转为指定类型的 Java 对象
            User userFromJson = objectMapper.readValue(jsonString, User.class);
            System.out.println("JSON 字符串 -> Java 对象:");
            System.out.println(userFromJson);
            // 输出: User{id=2, name='李四', username='lisi', isActive=false}
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
}

Google Gson

Gson 是 Google 开发的另一个非常流行的 JSON 库,以其简洁易用而闻名。

Java JSON字符串如何解析与使用?-图3
(图片来源网络,侵删)

Maven 依赖

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

核心类

  • Gson: Gson 的核心类,提供了 toJson()fromJson() 等主要方法。

示例代码

User.java (与上面相同,但注解需要换成 Gson 的)

import com.google.gson.annotations.SerializedName; // Gson 的注解
public class User {
    private int id;
    private String name;
    // 使用 @SerializedName 注解,指定 JSON 中的 key 为 "user_name"
    @SerializedName("user_name")
    private String username;
    private boolean isActive;
    public User() {
    }
    public User(int id, String name, String username, boolean isActive) {
        this.id = id;
        this.name = name;
        this.username = username;
        this.isActive = isActive;
    }
    // Getters and Setters
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }
    public boolean getActive() { return isActive; }
    public void setActive(boolean active) { isActive = active; }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", username='" + username + '\'' +
                ", isActive=" + isActive +
                '}';
    }
}

Main.java (Gson 示例)

import com.google.gson.Gson;
public class Main {
    public static void main(String[] args) {
        // 创建 Gson 实例
        Gson gson = new Gson();
        // --- 1. 将 Java 对象转换为 JSON 字符串 (序列化) ---
        User user = new User(1, "张三", "zhangsan", true);
        // toJson() 方法将对象转为 JSON 字符串
        String jsonString = gson.toJson(user);
        System.out.println("Java 对象 -> JSON 字符串:");
        System.out.println(jsonString);
        // 输出: {"id":1,"name":"张三","user_name":"zhangsan","isActive":true}
        System.out.println("\n----------------------------------------\n");
        // --- 2. 将 JSON 字符串解析为 Java 对象 (反序列化) ---
        String jsonStringToParse = "{\"id\":2,\"name\":\"李四\",\"user_name\":\"lisi\",\"isActive\":false}";
        // fromJson() 方法将 JSON 字符串转为指定类型的 Java 对象
        User userFromJson = gson.fromJson(jsonStringToParse, User.class);
        System.out.println("JSON 字符串 -> Java 对象:");
        System.out.println(userFromJson);
        // 输出: User{id=2, name='李四', username='lisi', isActive=false}
    }
}

org.json

这是一个轻量级的库,API 设计上更接近 JavaScript 的 JSON 对象,非常直观。

Maven 依赖

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20251013</version> <!-- 建议使用最新版本 -->
</dependency>

核心类

  • JSONObject: 表示一个 JSON 对象(键值对集合)。
  • JSONArray: 表示一个 JSON 数组。
  • JSONException: JSON 处理时可能抛出的异常。

示例代码

注意: org.json 库不要求你预先定义一个 Java User 类,它更灵活,可以直接操作 JSON 数据,但如果想转换成自定义对象,需要一些额外步骤。

Main.java (org.json 示例)

import org.json.JSONObject;
public class Main {
    public static void main(String[] args) {
        // --- 1. 从 Java 对象创建 JSON 字符串 ---
        // 直接构建 JSONObject
        User user = new User(1, "张三", "zhangsan", true);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("id", user.getId());
        jsonObject.put("name", user.getName());
        jsonObject.put("user_name", user.getUsername());
        jsonObject.put("isActive", user.isActive());
        String jsonString = jsonObject.toString();
        System.out.println("Java 对象 -> JSON 字符串:");
        System.out.println(jsonString);
        // 输出: {"id":1,"name":"张三","user_name":"zhangsan","isActive":true}
        System.out.println("\n----------------------------------------\n");
        // --- 2. 解析 JSON 字符串 ---
        String jsonStringToParse = "{\"id\":2,\"name\":\"李四\",\"user_name\":\"lisi\",\"isActive\":false}";
        JSONObject parsedJsonObject = new JSONObject(jsonStringToParse);
        // 从 JSONObject 中获取数据,可以手动构造成 Java 对象
        int id = parsedJsonObject.getInt("id");
        String name = parsedJsonObject.getString("name");
        String username = parsedJsonObject.getString("user_name");
        boolean isActive = parsedJsonObject.getBoolean("isActive");
        User userFromJson = new User(id, name, username, isActive);
        System.out.println("JSON 字符串 -> Java 对象:");
        System.out.println(userFromJson);
        // 输出: User{id=2, name='李四', username='lisi', isActive=false}
    }
}

手动转换的缺点: 使用 org.json 时,从 JSON 到 Java 对象的转换是手动的,如果字段很多,会非常繁琐,它更适合那些只需要处理 JSON 数据结构,而不需要严格映射到特定 Java 类型的场景。


总结与对比

特性 Jackson Gson org.json
流行度 非常高 (Spring Boot 默认) 非常高 (Google出品) 一般
易用性 简单,但需要 ObjectMapper 实例 非常简单,API直观 简单,API类似JS
性能 非常快,内存效率高 快,性能也很好 较快
功能 最强大,支持流式API、数据绑定、树模型等 功能强大,支持数据绑定等 功能相对基础,专注于JSON结构操作
与Java对象绑定 ,核心功能 ,核心功能 ,需要手动转换
依赖 jackson-databind gson json
推荐场景 企业级应用、大型项目、Spring Boot,功能全面,性能卓越。 通用场景、中小型项目,API简洁,易于上手。 轻量级需求、快速脚本、只需要操作JSON结构
  • 如果你正在开发一个新的项目,尤其是企业级应用或使用 Spring Boot,强烈推荐使用 Jackson。 它是事实上的标准。
  • 如果你需要一个简单、快速、可靠的库,并且不介意 Google 的背景,Gson 是一个绝佳的选择。
  • 如果你的需求非常简单,只是偶尔需要解析或生成一小段 JSON,或者你更喜欢 JavaScript 风格的 API,org.json 值得一试。 但对于复杂的数据映射,它会变得很麻烦。
分享:
扫描分享到社交APP
上一篇
下一篇