杰瑞科技汇

Java对象如何转成JSON字符串?

使用 Jackson (推荐)

Jackson 是目前 Java 生态中最流行、功能最强大的 JSON 处理库,它性能优异,功能全面,并且是 Spring Boot 等框架的默认选择。

Java对象如何转成JSON字符串?-图1
(图片来源网络,侵删)

添加依赖

你需要在你的项目中添加 Jackson 的核心库依赖。

Maven (pom.xml):

<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 对象

假设我们有一个 User 类。

Java对象如何转成JSON字符串?-图2
(图片来源网络,侵删)
// User.java
public class User {
    private String name;
    private int age;
    private String email;
    // Jackson 在进行序列化时,需要通过反射调用无参构造函数
    public User() {
    }
    public User(String name, int age, String email) {
        this.name = name;
        this.age = age;
        this.email = email;
    }
    // 为了方便打印和查看,建议重写 toString() 方法
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", email='" + email + '\'' +
                '}';
    }
    // 提供Getter方法,Jackson通过反射调用它们来获取属性值
    public String getName() { return name; }
    public int getAge() { return age; }
    public String getEmail() { return email; }
    // 提供Setter方法(反序列化时会用到)
    public void setName(String name) { this.name = name; }
    public void setAge(int age) { this.age = age; }
    public void setEmail(String email) { this.email = email; }
}

进行转换

使用 ObjectMapper 类来完成转换。

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonExample {
    public static void main(String[] args) {
        // 1. 创建 User 对象
        User user = new User("张三", 30, "zhangsan@example.com");
        // 2. 创建 ObjectMapper 实例(它是一个线程安全的类,可以复用)
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            // 3. 调用 writeValueAsString() 方法将对象转为 JSON 字符串
            String jsonString = objectMapper.writeValueAsString(user);
            // 4. 输出结果
            System.out.println(jsonString);
            // 输出: {"name":"张三","age":30,"email":"zhangsan@example.com"}
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
}

Jackson 常用配置

你可以通过 ObjectMapper 进行一些高级配置,

ObjectMapper mapper = new ObjectMapper();
// 美化输出(格式化,增加缩进和换行)
mapper.enable(SerializationFeature.INDENT_OUTPUT);
// 忽略 null 值的属性
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
// 处理日期格式
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
// 忽略未知属性(反序列化时,如果JSON中有Java对象中没有的属性,不会报错)
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

使用 Google Gson

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

添加依赖

Maven (pom.xml):

Java对象如何转成JSON字符串?-图3
(图片来源网络,侵删)
<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 对象

Gson 对 Java 对象的要求和 Jackson 类似,需要有默认的无参构造函数,并提供 Getter 方法。

进行转换

使用 Gson 类的 toJson() 方法。

import com.google.gson.Gson;
public class GsonExample {
    public static void main(String[] args) {
        // 1. 创建 User 对象
        User user = new User("李四", 25, "lisi@example.com");
        // 2. 创建 Gson 实例(它也是一个线程安全的类,可以复用)
        Gson gson = new Gson();
        // 3. 调用 toJson() 方法将对象转为 JSON 字符串
        String jsonString = gson.toJson(user);
        // 4. 输出结果
        System.out.println(jsonString);
        // 输出: {"name":"李四","age":25,"email":"lisi@example.com"}
    }
}

Gson 常用配置

Gson 提供了一个 GsonBuilder 来进行配置。

Gson gson = new GsonBuilder()
    // 美化输出
    .setPrettyPrinting()
    // 忽略 null 值
    .serializeNulls()
    // 设置日期格式
    .setDateFormat("yyyy-MM-dd")
    // 创建 Gson 实例
    .create();

对比与选择

特性 Jackson Gson
性能 更快,内存占用更小,尤其是在处理大数据量时。 性能良好,但通常略逊于 Jackson。
生态系统 非常强大,与 Spring 框架深度集成,是事实上的标准。 独立库,生态系统不如 Jackson。
易用性 API 相对复杂,但功能强大。 API 极其简洁,上手非常快。
高级功能 支持流式 API、树模型、数据绑定等,功能全面。 功能齐全,但 Jackson 在某些高级特性上更胜一筹。
注解支持 提供丰富的注解(如 @JsonProperty, @JsonIgnore)。 也提供注解支持,但 Jackson 的注解生态更成熟。

如何选择?

  • 新项目,尤其是基于 Spring Boot 的项目强烈推荐 Jackson,它是默认选择,无缝集成,性能最好。
  • 需要快速实现,或项目与 Spring 无关Gson 是一个非常好的选择,它的 API 非常直观,简单易用。
  • 性能要求极高的应用优先考虑 Jackson

处理复杂对象(嵌套对象、List)

无论是 Jackson 还是 Gson,处理嵌套对象、ListMap 都非常简单,只要确保嵌套的对象也是可以被序列化的即可。

示例:List<User>

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import java.util.Arrays;
import java.util.List;
public class ComplexObjectExample {
    public static void main(String[] args) {
        // 创建一个用户列表
        List<User> userList = Arrays.asList(
            new User("张三", 30, "zhangsan@example.com"),
            new User("李四", 25, "lisi@example.com")
        );
        // --- 使用 Jackson ---
        ObjectMapper jacksonMapper = new ObjectMapper();
        try {
            String jacksonJson = jacksonMapper.writeValueAsString(userList);
            System.out.println("--- Jackson ---");
            System.out.println(jacksonJson);
            // 输出: [{"name":"张三","age":30,"email":"zhangsan@example.com"},{"name":"李四","age":25,"email":"lisi@example.com"}]
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        // --- 使用 Gson ---
        Gson gson = new Gson();
        String gsonJson = gson.toJson(userList);
        System.out.println("\n--- Gson ---");
        System.out.println(gsonJson);
        // 输出: [{"name":"张三","age":30,"email":"zhangsan@example.com"},{"name":"李四","age":25,"email":"lisi@example.com"}]
    }
}

要将 Java 对象转为 JSON 字符串,核心步骤如下:

  1. 选择库:在 Jackson 和 Gson 之间做出选择。
  2. 添加依赖:在 pom.xmlbuild.gradle 中添加相应库的依赖。
  3. 准备对象:确保你的 Java 类有无参构造函数和 Getter 方法。
  4. 调用 API
    • Jackson: new ObjectMapper().writeValueAsString(object)
    • Gson: new Gson().toJson(object)
  5. 处理异常JsonProcessingException (Jackson) 或 JsonSyntaxException (Gson)。

对于绝大多数现代 Java 项目,Jackson 是更推荐的选择。

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