核心概念
将一个 Java 对象(Object)或 JSON 数据结构(如 Map, List)转换成一个 JSON 格式的字符串,这个过程就是序列化。

使用 Jackson (推荐)
Jackson 是目前 Java 生态中最流行、功能最强大的 JSON 处理库,Spring Boot 等主流框架都默认使用它。
添加依赖
确保你的项目中包含了 Jackson 的核心库,如果你使用 Maven,在 pom.xml 中添加:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version> <!-- 建议使用最新版本 -->
</dependency>
使用 ObjectMapper
ObjectMapper 是 Jackson 的核心类,负责所有的 JSON 序列化和反序列化工作。
示例 1:将 Java 对象转换为 JSON 字符串

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
// 1. 定义一个简单的 Java 类 (POJO)
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 JacksonExample {
public static void main(String[] args) {
// 2. 创建 ObjectMapper 实例
ObjectMapper objectMapper = new ObjectMapper();
// 3. 创建 Java 对象
User user = new User("张三", 30, "zhangsan@example.com");
try {
// 4. 调用 writeValueAsString 方法进行转换
String jsonString = objectMapper.writeValueAsString(user);
// 5. 输出结果
System.out.println("转换后的 JSON 字符串:");
System.out.println(jsonString);
// 输出: {"name":"张三","age":30,"email":"zhangsan@example.com"}
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
示例 2:将 Map 或 List 转换为 JSON 字符串
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.Map;
public class JacksonMapExample {
public static void main(String[] args) {
ObjectMapper objectMapper = new ObjectMapper();
// 创建一个 Map
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("name", "李四");
dataMap.put("age", 25);
dataMap.put("isStudent", true);
dataMap.put("courses", new String[]{"数学", "英语", "物理"});
try {
String jsonString = objectMapper.writeValueAsString(dataMap);
System.out.println("Map 转换后的 JSON 字符串:");
System.out.println(jsonString);
// 输出: {"name":"李四","age":25,"isStudent":true,"courses":["数学","英语","物理"]}
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
Jackson 常用配置:
你可以在创建 ObjectMapper 后进行一些配置,以控制输出格式。
ObjectMapper objectMapper = new ObjectMapper();
// 美化输出 (格式化,增加缩进和换行)
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
// 忽略 null 值的字段
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
// 处理日期格式
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
使用 Gson
Google 的 Gson 是另一个非常流行的 JSON 库,以其简洁易用而闻名。

添加依赖 (Maven)
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version> <!-- 建议使用最新版本 -->
</dependency>
使用 Gson
Gson 的使用非常直接,通常创建一个 Gson 实例然后调用 toJson() 方法。
示例 1:将 Java 对象转换为 JSON 字符串
import com.google.gson.Gson;
// 使用上面定义的 User 类
public class GsonExample {
public static void main(String[] args) {
// 1. 创建 Gson 实例
Gson gson = new Gson();
// 2. 创建 Java 对象
User user = new User("王五", 28, "wangwu@example.com");
// 3. 调用 toJson 方法进行转换
String jsonString = gson.toJson(user);
// 4. 输出结果
System.out.println("转换后的 JSON 字符串:");
System.out.println(jsonString);
// 输出: {"name":"王五","age":28,"email":"wangwu@example.com"}
}
}
Gson 常用配置:
Gson 提供了 GsonBuilder 来进行更精细的配置。
Gson gson = new GsonBuilder()
.setPrettyPrinting() // 美化输出
.serializeNulls() // 序列化 null 值
.create();
使用 org.json (轻量级)
这是一个非常轻量级的库,API 简单直接,但功能相对前两者较少。
添加依赖 (Maven)
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20251013</version> <!-- 建议使用最新版本 -->
</dependency>
使用 JSONObject 和 JSONArray
这个库需要你手动构建 JSON 结构。
示例:将数据组合成 JSON 字符串
import org.json.JSONObject;
public class OrgJsonExample {
public static void main(String[] args) {
// 1. 创建一个 JSONObject 对象,代表 JSON 对象
JSONObject jsonObject = new JSONObject();
// 2. 使用 put 方法添加键值对
jsonObject.put("name", "赵六");
jsonObject.put("age", 35);
jsonObject.put("city", "北京");
// 3. 可以嵌套其他 JSONObject 或 JSONArray
JSONObject address = new JSONObject();
address.put("street", "长安街1号");
address.put("zipcode", 100001);
jsonObject.put("address", address);
// 4. 直接调用 toString() 方法
String jsonString = jsonObject.toString();
// 5. 输出结果
System.out.println("转换后的 JSON 字符串:");
System.out.println(jsonString);
// 输出: {"name":"赵六","age":35,"city":"北京","address":{"street":"长安街1号","zipcode":100001}}
}
}
总结与对比
| 特性 | Jackson | Gson | org.json |
|---|---|---|---|
| 流行度 | 非常高 (Spring Boot 默认) | 非常高 | 较低 |
| 易用性 | 中等 (功能强大,配置稍复杂) | 非常简单 | 简单 (但需要手动构建) |
| 性能 | 非常高 | 高 | 一般 |
| 功能 | 最全面 (流式 API, 树模型, 数据绑定, 注解支持等) | 功能齐全 (数据绑定, 流式 API) | 基础功能 (构建和解析 JSON) |
| 数据绑定 | 优秀 (自动映射 POJO) | 优秀 (自动映射 POJO) | 不支持 (需手动 put) |
| 推荐场景 | 大型项目、企业级应用、Web 服务 | 通用、中小型项目、追求简洁的场景 | 轻量级需求、快速原型、不需要复杂对象映射 |
最终建议
- 如果你正在使用 Spring Boot,直接使用 Jackson,因为它已经包含在
