杰瑞科技汇

java把list转成json

使用 Jackson (最推荐)

Jackson 是目前 Java 生态中最流行、性能最好的 JSON 库之一,Spring Boot 和许多其他 Java 框架都默认使用它。

java把list转成json-图1
(图片来源网络,侵删)

添加依赖

如果你使用 Maven,在 pom.xml 中添加 Jackson 核心库的依赖:

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

编写代码

Jackson 提供了一个 ObjectMapper 类,它是所有操作的核心。

场景1:List 转成简单的 JSON 数组

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Arrays;
import java.util.List;
public class JacksonListToJsonExample {
    public static void main(String[] args) {
        // 1. 准备一个 List
        List<String> nameList = Arrays.asList("Alice", "Bob", "Charlie");
        // 2. 创建 ObjectMapper 实例
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            // 3. 使用 writeValueAsString 方法将 List 转换为 JSON 字符串
            // 结果: ["Alice", "Bob", "Charlie"]
            String jsonString = objectMapper.writeValueAsString(nameList);
            System.out.println(jsonString);
            // List of integers
            List<Integer> numberList = Arrays.asList(1, 2, 3, 4, 5);
            String numbersJson = objectMapper.writeValueAsString(numberList);
            System.out.println(numbersJson); // 结果: [1, 2, 3, 4, 5]
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
}

场景2:List 转成包含 JSON 对象的数组

java把list转成json-图2
(图片来源网络,侵删)

这是更常见的情况,即 List 中存放的是自定义的 Java 对象。

步骤:

  1. 定义一个 Java Bean (POJO)。
  2. 确保该 Bean 有无参构造函数,并且属性有 gettersetter 方法(或者将属性设为 public)。
  3. 使用 ObjectMapper 进行转换。
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.List;
// 1. 定义一个简单的 Java Bean
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;
    }
    // 必须有 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 String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
    // (可选) 重写 toString 方法方便打印
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", email='" + email + '\'' +
                '}';
    }
}
public class JacksonListObjectToJsonExample {
    public static void main(String[] args) {
        // 2. 创建一个 User 对象的 List
        List<User> userList = new ArrayList<>();
        userList.add(new User("Alice", 30, "alice@example.com"));
        userList.add(new User("Bob", 25, "bob@example.com"));
        userList.add(new User("Charlie", 35, "charlie@example.com"));
        // 3. 创建 ObjectMapper 实例
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            // 4. 转换为 JSON 字符串
            String jsonString = objectMapper.writeValueAsString(userList);
            System.out.println(jsonString);
            // 输出结果 (为了可读性,格式化后):
            // [
            //   {
            //     "name" : "Alice",
            //     "age" : 30,
            //     "email" : "alice@example.com"
            //   },
            //   {
            //     "name" : "Bob",
            //     "age" : 25,
            //     "email" : "bob@example.com"
            //   },
            //   {
            //     "name" : "Charlie",
            //     "age" : 35,
            //     "email" : "charlie@example.com"
            //   }
            // ]
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
}

Jackson 常用配置

ObjectMapper 提供了丰富的配置选项,例如美化输出(格式化 JSON):

ObjectMapper objectMapper = new ObjectMapper();
// 启用美化输出 (indents)
objectMapper.enable(SerializationFeature.INDENT_OUTPUT); 
String jsonString = objectMapper.writeValueAsString(userList);
System.out.println(jsonString);
// 输出上面那种带缩进的格式

使用 Gson

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

添加依赖

Maven 依赖:

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

编写代码

Gson 的核心是 Gson 类。

场景1:List 转成简单的 JSON 数组

import com.google.gson.Gson;
import java.util.Arrays;
import java.util.List;
public class GsonListToJsonExample {
    public static void main(String[] args) {
        List<String> nameList = Arrays.asList("Alice", "Bob", "Charlie");
        // 1. 创建 Gson 实例
        Gson gson = new Gson();
        // 2. 使用 toJson 方法进行转换
        String jsonString = gson.toJson(nameList);
        System.out.println(jsonString); // 结果: ["Alice","Bob","Charlie"]
    }
}

场景2:List 转成包含 JSON 对象的数组

与 Jackson 类似,Gson 也需要 Java Bean。

import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
// 使用上面定义好的 User 类
public class GsonListObjectToJsonExample {
    public static void main(String[] args) {
        List<User> userList = new ArrayList<>();
        userList.add(new User("Alice", 30, "alice@example.com"));
        userList.add(new User("Bob", 25, "bob@example.com"));
        Gson gson = new Gson();
        String jsonString = gson.toJson(userList);
        System.out.println(jsonString);
        // 输出结果:
        // [{"name":"Alice","age":30,"email":"alice@example.com"},{"name":"Bob","age":25,"email":"bob@example.com"}]
    }
}

Gson 美化输出

Gson 默认不美化输出,但可以通过 GsonBuilder 来实现:

import com.google.gson.GsonBuilder;
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String prettyJsonString = gson.toJson(userList);
System.out.println(prettyJsonString);
// 输出格式化后的 JSON

在 Spring Boot 中的使用 (最便捷)

如果你正在使用 Spring Boot,事情会变得非常简单,因为 Jackson 已经是 Spring Boot 的默认依赖,你无需手动添加。

无需额外依赖

确保你的 pom.xml 中有 spring-boot-starter-web,它已经包含了 Jackson。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

使用 @ResponseBody@RestController

在 Spring Boot 中,你只需要在 Controller 方法中返回 List,Spring Boot 会自动使用 Jackson 将其序列化为 JSON 字符串并返回给客户端。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
// 假设 User 类已经定义好
@RestController
public class MyController {
    @GetMapping("/users")
    public List<User> getUsers() {
        List<User> userList = Arrays.asList(
            new User("Alice", 30, "alice@example.com"),
            new User("Bob", 25, "bob@example.com")
        );
        // Spring Boot 会自动调用 Jackson 将这个 List 序列化为 JSON
        return userList;
    }
    @GetMapping("/names")
    public List<String> getNames() {
        return Arrays.asList("Alice", "Bob", "Charlie");
    }
}

当你访问 http://localhost:8080/users 时,浏览器会收到如下 JSON 响应:

[
  {
    "name": "Alice",
    "age": 30,
    "email": "alice@example.com"
  },
  {
    "name": "Bob",
    "age": 25,
    "email": "bob@example.com"
  }
]

总结与对比

特性 Jackson Gson Spring Boot (内置 Jackson)
易用性 非常好,API 丰富 非常好,API 简洁 极其简单,开箱即用
性能 非常高,业界标杆 高,性能也很好 高,底层是 Jackson
集成度 Spring Boot 默认,生态系统成熟 Google出品,应用广泛 无缝集成,无需任何配置
功能 功能最全面,支持流式处理、数据绑定等 功能全面,专注于 JSON 功能由 Jackson 提供
推荐场景 首选,特别是新项目或 Spring Boot 项目 如果项目已经使用 Gson,或者偏好 Google 的生态 Spring 项目的最佳选择
  • 对于新项目,特别是基于 Spring Boot 的项目,直接使用 Jackson 是最稳妥、最高效的选择。
  • 如果你的项目已经深度依赖 Gson,或者你对 Google 的技术栈有偏好,继续使用 Gson 完全没问题。
  • 在 Spring Boot 中,你几乎感觉不到 Jackson 的存在,它就像一个默默无闻的英雄,自动为你处理所有 JSON 转换的工作。
分享:
扫描分享到社交APP
上一篇
下一篇