杰瑞科技汇

Java JSON串转对象,如何实现?

核心概念

我们需要明确两个概念:

Java JSON串转对象,如何实现?-图1
(图片来源网络,侵删)
  1. JSON 字符串 (JSON String): 指的是用引号括起来的、符合 JSON 格式的文本。'{"name":"张三", "age":30, "isStudent":false}',在 Java 中,它通常是一个 String 类型的变量。

  2. JSON 对象 (JSON Object):

    • 广义上:指代任何符合 JSON 结构的数据,可以是对象()、数组([...])、字符串、数字等。
    • 在 Java 中
      • 可以指 org.json 库中的 JSONObjectJSONArray(比较老旧,不推荐在新项目中使用)。
      • 更常见的是指通过 Jackson 或 Gson 将 JSON 字符串反序列化后得到的 Java 对象,一个 User 类的实例,这是最推荐的方式,因为它能提供类型安全和代码提示。

使用 Jackson (最推荐)

Jackson 是目前 Java 生态中最流行、功能最强大的 JSON 处理库,Spring Boot 等主流框架都默认集成了它。

添加依赖

如果你使用 Maven,在 pom.xml 中添加依赖:

Java JSON串转对象,如何实现?-图2
(图片来源网络,侵删)
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version> <!-- 使用最新稳定版本 -->
</dependency>

如果你使用 Gradle,在 build.gradle 中添加:

implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2' // 使用最新稳定版本

准备一个 Java 类(POJO)

为了将 JSON 字符串转换成有类型的 Java 对象,你需要一个与之对应的 Java 类(通常称为 POJO - Plain Old Java Object)。

// User.java
public class User {
    private String name;
    private int age;
    private boolean isStudent;
    // 必须有无参构造函数,Jackson 在反序列化时会用到
    public User() {
    }
    // 推荐:提供 getter 和 setter 方法
    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 boolean isStudent() {
        return isStudent;
    }
    public void setStudent(boolean student) {
        isStudent = student;
    }
    // 可选:重写 toString() 方便打印和调试
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", isStudent=" + isStudent +
                '}';
    }
}

核心转换代码

Jackson 提供了 ObjectMapper 类,它是所有操作的入口。

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. 定义你的 JSON 字符串
        String jsonString = "{\"name\":\"李四\", \"age\":25, \"isStudent\":true}";
        try {
            // 3. 调用 objectMapper.readValue() 方法进行转换
            // 第一个参数是 JSON 字符串
            // 第二个参数是你要转换成的 Java 对象的 .class 文件
            User user = objectMapper.readValue(jsonString, User.class);
            // 4. 现在你可以像使用普通 Java 对象一样使用 user
            System.out.println("转换成功!");
            System.out.println(user.getName()); // 输出: 李四
            System.out.println(user.getAge());  // 输出: 25
            System.out.println(user.isStudent()); // 输出: true
            System.out.println(user); // 调用 toString() 方法
        } catch (JsonProcessingException e) {
            System.err.println("JSON 解析失败!");
            e.printStackTrace();
        }
    }
}

使用 Gson

Google 的 Gson 是另一个非常流行且易用的 JSON 库。

Java JSON串转对象,如何实现?-图3
(图片来源网络,侵删)

添加依赖

Maven (pom.xml):

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

Gradle (build.gradle):

implementation 'com.google.code.gson:gson:2.10.1' // 使用最新稳定版本

准备 Java 类 (POJO)

和 Jackson 一样,你需要一个对应的 Java 类。User.java 的代码完全相同。

核心转换代码

Gson 的使用也非常直观,通过 Gson 类的 fromJson() 方法实现。

import com.google.gson.Gson;
public class GsonExample {
    public static void main(String[] args) {
        // 1. 创建 Gson 实例(同样建议全局单例)
        Gson gson = new Gson();
        // 2. 定义你的 JSON 字符串
        String jsonString = "{\"name\":\"王五\", \"age\":28, \"isStudent\":false}";
        try {
            // 3. 调用 gson.fromJson() 方法进行转换
            // 第一个参数是 JSON 字符串
            // 第二个参数是你要转换成的 Java 对象的 .class 文件
            User user = gson.fromJson(jsonString, User.class);
            // 4. 使用转换后的 Java 对象
            System.out.println("转换成功!");
            System.out.println(user.getName()); // 输出: 王五
            System.out.println(user.getAge());  // 输出: 28
            System.out.println(user.isStudent()); // 输出: false
            System.out.println(user);
        } catch (Exception e) {
            System.err.println("JSON 解析失败!");
            e.printStackTrace();
        }
    }
}

使用 org.json (不推荐,仅作了解)

这是一个比较基础的 JSON 库,但它的设计不够“面向对象”,它转换出的不是你自定义的 Java 类,而是 JSONObjectJSONArray 这样的通用对象,你需要手动从中取值。

添加依赖

Maven (pom.xml):

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

核心转换代码

import org.json.JSONObject;
public class OrgJsonExample {
    public static void main(String[] args) {
        // 1. 定义你的 JSON 字符串
        String jsonString = "{\"name\":\"赵六\", \"age\":35, \"isStudent\":false}";
        try {
            // 2. 直接使用 JSONObject 的构造函数将字符串转换为对象
            JSONObject jsonObject = new JSONObject(jsonString);
            // 3. 通过 getXXX() 方法从 jsonObject 中获取数据
            // 注意:get 的参数是 JSON 中的 key,返回值是 Object,需要手动类型转换
            String name = jsonObject.getString("name");
            int age = jsonObject.getInt("age");
            boolean isStudent = jsonObject.getBoolean("isStudent");
            System.out.println("转换成功!");
            System.out.println(name); // 输出: 赵六
            System.out.println(age);  // 输出: 35
            System.out.println(isStudent); // 输出: false
            // 这种方式无法直接得到一个 User 对象,只能得到一个通用的 JSONObject
            System.out.println(jsonObject); // 输出: {"name":"赵六","age":35,"isStudent":false}
        } catch (Exception e) {
            System.err.println("JSON 解析失败!");
            e.printStackTrace();
        }
    }
}

总结与对比

特性 Jackson Gson org.json
流行度 非常高 (Spring Boot 默认) 非常高 (Google出品) 一般,较老旧
易用性 非常简单,ObjectMapper 是核心 非常简单,Gson 是核心 简单,但不够面向对象
性能 性能优异,功能强大 性能良好,功能齐全 性能一般
核心优势 功能全面,数据绑定强大,支持流式处理等 API简洁,易于上手 轻量级,依赖小
推荐场景 所有新项目,尤其是 Spring 生态项目 任何需要处理 JSON 的 Java 项目 快速处理简单 JSON,不涉及复杂对象映射
转换结果 类型安全的自定义 Java 对象 (POJO) 类型安全的自定义 Java 对象 (POJO) 通用的 JSONObject / JSONArray

最终建议

对于任何新的 Java 项目,强烈推荐使用 Jackson,它是行业标准,功能、性能和社区支持都处于领先地位,如果你只是需要一个非常轻量级的工具且不介意手动取值,org.json 也可以考虑,但 Gson 通常是比它更好的选择。

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