Java 中最流行和推荐使用的 JSON 库是 Jackson、Gson 和 Fastjson,下面我将分别介绍这三个库的使用方法,并给出完整的代码示例。

使用 Jackson (推荐)
Jackson 是目前 Java 生态中最主流、性能最好的 JSON 处理库,Spring Boot 等主流框架都默认使用它。
步骤:
-
添加依赖 如果你使用 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 代码 Jackson 提供了
ObjectMapper类,它是核心工具类。
(图片来源网络,侵删)示例 1:将 Map 转换成 JSON 字符串
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.HashMap; import java.util.Map; public class JacksonMapToJson { public static void main(String[] args) { // 1. 创建 ObjectMapper 实例 ObjectMapper objectMapper = new ObjectMapper(); // 2. 创建一个 Map 作为数据源 Map<String, Object> dataMap = new HashMap<>(); dataMap.put("name", "张三"); dataMap.put("age", 30); dataMap.put("isStudent", false); dataMap.put("courses", new String[]{"数学", "语文"}); try { // 3. 使用 writeValueAsString 方法进行转换 // 默认格式化,没有缩进 String jsonString = objectMapper.writeValueAsString(dataMap); System.out.println("默认格式的 JSON 字符串:"); System.out.println(jsonString); // 4. 使用 writerWithDefaultPrettyPrinter 进行美化输出(带缩进) String prettyJsonString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(dataMap); System.out.println("\n美化后的 JSON 字符串:"); System.out.println(prettyJsonString); } catch (JsonProcessingException e) { e.printStackTrace(); } } }示例 2:将自定义对象 (POJO) 转换成 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; // 必须有无参构造函数 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 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 JacksonPojoToJson { public static void main(String[] args) { ObjectMapper objectMapper = new ObjectMapper(); // 创建 User 对象 User user = new User(); user.setName("李四"); user.setAge(25); user.setEmail("lisi@example.com"); try { // 将 User 对象转换为 JSON 字符串 String jsonString = objectMapper.writeValueAsString(user); System.out.println("User 对象的 JSON 字符串:"); System.out.println(jsonString); } catch (JsonProcessingException e) { e.printStackTrace(); } } }
使用 Gson
Google 的 Gson 库也非常流行,使用简单直观。
步骤:
-
添加依赖 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 代码 Gson 的核心是
Gson类。示例 1:将 Map 转换成 JSON 字符串
import com.google.gson.Gson; import java.util.HashMap; import java.util.Map; public class GsonMapToJson { public static void main(String[] args) { // 1. 创建 Gson 实例 Gson gson = new Gson(); // 2. 创建 Map 数据源 Map<String, Object> dataMap = new HashMap<>(); dataMap.put("name", "王五"); dataMap.put("age", 40); dataMap.put("isStudent", false); dataMap.put("courses", new String[]{"英语", "物理"}); // 3. 使用 toJson 方法进行转换 String jsonString = gson.toJson(dataMap); System.out.println("JSON 字符串:"); System.out.println(jsonString); // Gson 默认不提供美化输出的便捷方法,需要手动处理或使用其他库 } }示例 2:将自定义对象 (POJO) 转换成 JSON 字符串
import com.google.gson.Gson; // 使用和 Jackson 示例中相同的 User 类 class User { private String name; private int age; private String email; public User() {} 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; } } public class GsonPojoToJson { public static void main(String[] args) { Gson gson = new Gson(); User user = new User(); user.setName("赵六"); user.setAge(28); user.setEmail("zhaoliu@example.com"); // 将 User 对象转换为 JSON 字符串 String jsonString = gson.toJson(user); System.out.println("User 对象的 JSON 字符串:"); System.out.println(jsonString); } }
使用 Fastjson (阿里巴巴)
Fastjson 是由阿里巴巴开发的一个高性能 JSON 库,在国内使用非常广泛。但请注意,Fastjson 曾有多个高危漏洞,虽然新版本已修复,但在选择时仍需考虑安全性。
步骤:
-
添加依赖 Maven (
pom.xml):<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> <!-- 使用最新稳定版本 --> </dependency>Gradle (
build.gradle):implementation 'com.alibaba:fastjson:1.2.83' // 使用最新稳定版本
-
编写 Java 代码 Fastjson 的 API 非常简洁。
示例 1:将 Map 转换成 JSON 字符串
import com.alibaba.fastjson.JSON; import java.util.HashMap; import java.util.Map; public class FastjsonMapToJson { public static void main(String[] args) { // 1. 创建 Map 数据源 Map<String, Object> dataMap = new HashMap<>(); dataMap.put("name", "钱七"); dataMap.put("age", 35); dataMap.put("isStudent", false); dataMap.put("courses", new String[]{"化学", "生物"}); // 2. 使用 JSON.toJSONString 方法进行转换 String jsonString = JSON.toJSONString(dataMap); System.out.println("JSON 字符串:"); System.out.println(jsonString); // Fastjson 提供了简单的美化输出方式 String prettyJsonString = JSON.toJSONString(dataMap, true); // 第二个参数 true 表示美化 System.out.println("\n美化后的 JSON 字符串:"); System.out.println(prettyJsonString); } }示例 2:将自定义对象 (POJO) 转换成 JSON 字符串
import com.alibaba.fastjson.JSON; // 使用和前面相同的 User 类 class User { private String name; private int age; private String email; public User() {} 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; } } public class FastjsonPojoToJson { public static void main(String[] args) { User user = new User(); user.setName("孙八"); user.setAge(22); user.setEmail("sunba@example.com"); // 将 User 对象转换为 JSON 字符串 String jsonString = JSON.toJSONString(user); System.out.println("User 对象的 JSON 字符串:"); System.out.println(jsonString); } }
总结与对比
| 特性 | Jackson | Gson | Fastjson |
|---|---|---|---|
| 流行度 | 非常高 (Spring Boot 默认) | 非常高 | 国内非常高 |
| 性能 | 非常优秀 | 优秀 | 非常优秀 |
| 易用性 | API 丰富,功能强大 | API 简洁直观 | API 极其简洁 |
| 灵活性 | 高,支持复杂配置 | 中等 | 高,支持注解等 |
| 安全性 | 相对安全 | 相对安全 | 曾存在高危漏洞,新版本已修复,但需谨慎 |
| 美化输出 | writerWithDefaultPrettyPrinter() |
无直接方法,需手动处理 | JSON.toJSONString(obj, true) |
| 推荐场景 | 新项目首选,特别是 Spring 生态项目 | 简单项目,或对 Google 技术栈有偏好的项目 | 国内电商、互联网公司项目,但需关注安全动态 |
对于大多数新项目,Jackson 是最稳妥、功能最全面的选择,如果你只需要一个非常简单的 JSON 处理工具,Gson 是个不错的选择,如果你在国内工作,并且项目团队已经在使用 Fastjson,那么继续使用它也可以,但务必保持库版本为最新,并关注其安全公告。
