核心概念
- JSON (JavaScript Object Notation):一种轻量级的数据交换格式,它易于人阅读和编写,也易于机器解析和生成。
- String (字符串):Java 中用于表示文本的基本数据类型。
转换的本质就是将 JSON 格式的文本序列化(Serialize)为 Java 的 String 对象,或者将一个符合 JSON 格式的 String 反序列化(Deserialize)为 Java 对象(如 Map, List, 或自定义的 JavaBean)。

使用 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>
Java 对象/Map/List 转换为 JSON 字符串
使用 ObjectMapper 类的 writeValueAsString() 方法。
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.Map;
public class JacksonToStringExample {
public static void main(String[] args) {
ObjectMapper objectMapper = new ObjectMapper();
// 示例 1: 将 Java Map 转换为 JSON 字符串
Map<String, Object> mapData = new HashMap<>();
mapData.put("name", "张三");
mapData.put("age", 30);
mapData.put("isStudent", false);
mapData.put("courses", new String[]{"数学", "英语"});
try {
String jsonStringFromMap = objectMapper.writeValueAsString(mapData);
System.out.println("Map -> JSON String:");
System.out.println(jsonStringFromMap);
// 输出: {"name":"张三","age":30,"isStudent":false,"courses":["数学","英语"]}
} catch (JsonProcessingException e) {
e.printStackTrace();
}
// 示例 2: 将自定义 JavaBean 转换为 JSON 字符串
User user = new User("李四", 25);
try {
String jsonStringFromObject = objectMapper.writeValueAsString(user);
System.out.println("\nUser Object -> JSON String:");
System.out.println(jsonStringFromObject);
// 输出: {"name":"李四","age":25}
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
// 自定义的 JavaBean
static class User {
private String name;
private int age;
// 构造器、Getter 和 Setter 是必须的
public User() {}
public User(String name, int age) {
this.name = name;
this.age = age;
}
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; }
}
}
JSON 字符串转换为 Java 对象/Map/List
使用 ObjectMapper 类的 readValue() 方法。

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;
public class JacksonFromStringExample {
public static void main(String[] args) {
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = "{\"name\":\"王五\",\"age\":28,\"city\":\"北京\"}";
// 示例 1: 将 JSON 字符串转换为 Java Map
try {
// 使用 TypeReference 来明确指定目标类型,避免类型擦除问题
Map<String, Object> map = objectMapper.readValue(jsonString, new TypeReference<Map<String, Object>>() {});
System.out.println("JSON String -> Map:");
System.out.println("Name: " + map.get("name")); // 输出: Name: 王五
System.out.println("Age: " + map.get("age")); // 输出: Age: 28
} catch (JsonProcessingException e) {
e.printStackTrace();
}
// 示例 2: 将 JSON 字符串转换为自定义 JavaBean
String userJsonString = "{\"name\":\"赵六\",\"age\":32}";
try {
User user = objectMapper.readValue(userJsonString, User.class);
System.out.println("\nJSON String -> User Object:");
System.out.println("Name: " + user.getName()); // 输出: Name: 赵六
System.out.println("Age: " + user.getAge()); // 输出: Age: 32
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
static class User {
private String name;
private int age;
// 无参构造器是必须的
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; }
}
}
使用 Gson
Google 的 Gson 是另一个非常流行的 JSON 处理库,使用起来也非常简单。
添加依赖
Maven (pom.xml):
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version> <!-- 使用最新的稳定版本 -->
</dependency>
Java 对象/Map/List 转换为 JSON 字符串
使用 Gson 类的 toJson() 方法。
import com.google.gson.Gson;
import java.util.HashMap;
import java.util.Map;
public class GsonToStringExample {
public static void main(String[] args) {
Gson gson = new Gson();
// 示例: 将 Java Map 转换为 JSON 字符串
Map<String, Object> mapData = new HashMap<>();
mapData.put("name", "钱七");
mapData.put("age", 40);
mapData.put("skills", new String[]{"Java", "Python"});
String jsonString = gson.toJson(mapData);
System.out.println("Map -> JSON String:");
System.out.println(jsonString);
// 输出: {"name":"钱七","age":40,"skills":["Java","Python"]}
}
}
JSON 字符串转换为 Java 对象/Map/List
使用 Gson 类的 fromJson() 方法,并指定目标类型。

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.Map;
public class GsonFromStringExample {
public static void main(String[] args) {
Gson gson = new Gson();
String jsonString = "{\"name\":\"孙八\",\"age\":45,\"hobby\":\"读书\"}";
// 示例 1: 将 JSON 字符串转换为 Java Map
// 需要使用 TypeToken 来获取正确的类型
Type mapType = new TypeToken<Map<String, Object>>() {}.getType();
Map<String, Object> map = gson.fromJson(jsonString, mapType);
System.out.println("JSON String -> Map:");
System.out.println("Name: " + map.get("name")); // 输出: Name: 孙八
// 示例 2: 将 JSON 字符串转换为自定义 JavaBean
User user = gson.fromJson("{\"name\":\"周九\",\"age\":50}", User.class);
System.out.println("\nJSON String -> User Object:");
System.out.println("Name: " + user.getName()); // 输出: Name: 周九
}
static class User {
private String name;
private int age;
public User() {}
public User(String name, int age) {
this.name = name;
this.age = age;
}
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; }
}
}
使用 org.json (简单轻量)
这是一个非常轻量级的库,适合简单的 JSON 操作,不需要复杂的对象映射。
添加依赖
Maven (pom.xml):
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20251013</version> <!-- 使用最新的稳定版本 -->
</dependency>
创建 JSON 字符串
这个库不直接从 Java 对象转换,而是通过构建 JSONObject 和 JSONArray 来生成 JSON 字符串。
import org.json.JSONObject;
import org.json.JSONArray;
public class OrgJsonToStringExample {
public static void main(String[] args) {
// 创建一个 JSONObject
JSONObject person = new JSONObject();
person.put("name", "吴十");
person.put("age", 55);
// 创建一个 JSONArray 并添加到 JSONObject
JSONArray hobbies = new JSONArray();
hobbies.put("游泳");
hobbies.put("登山");
person.put("hobbies", hobbies);
// 使用 toString() 方法将其转换为 JSON 字符串
String jsonString = person.toString();
System.out.println("JSONObject -> JSON String:");
System.out.println(jsonString);
// 输出: {"name":"吴十","age":55,"hobbies":["游泳","登山"]}
}
}
解析 JSON 字符串
将 JSON 字符串解析回 JSONObject 或 JSONArray。
import org.json.JSONObject;
import org.json.JSONArray;
public class OrgJsonFromStringExample {
public static void main(String[] args) {
String jsonString = "{\"name\":\"郑十一\",\"age\":60,\"courses\":[\"历史\",\"地理\"]}";
// 将字符串解析为 JSONObject
JSONObject jsonObject = new JSONObject(jsonString);
// 从 JSONObject 中获取值
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
System.out.println("JSON String -> JSONObject:");
System.out.println("Name: " + name); // 输出: Name: 郑十一
System.out.println("Age: " + age); // 输出: Age: 60
// 获取 JSONArray
JSONArray courses = jsonObject.getJSONArray("courses");
System.out.println("\nCourses:");
for (int i = 0; i < courses.length(); i++) {
System.out.println(courses.getString(i)); // 输出: 历史, 地理
}
}
}
总结与对比
| 特性 | Jackson | Gson | org.json |
|---|---|---|---|
| 流行度 | 非常高 (Spring Boot 默认) | 非常高 (Google出品) | 一般 |
| 性能 | 非常高 | 高 | 一般 |
| 易用性 | 简单,功能强大 | 非常简单 | 简单,但需要手动构建JSON结构 |
| 主要特点 | 强大的数据绑定、流式API、模块化 | 简洁的API,直接支持复杂对象转换 | 轻量级,专注于JSON本身,不依赖反射 |
| 适用场景 | 企业级应用、Web服务、高性能需求 | 通用场景,特别是与Google产品集成 | 简单脚本、快速原型、轻量级需求 |
如何选择?
- 如果你正在使用 Spring Boot 或其他大型 Java 框架:直接使用 Jackson,它已经为你准备好了,性能和功能都无与伦比。
- 如果你需要一个简单、稳定且与 Google 生态关联的库:选择 Gson,它的 API 设计非常直观,对于新手也很友好。
- 如果你只需要做一些简单的 JSON 拼接和解析,不涉及复杂的 JavaBean 映射:可以使用 org.json,它足够轻量,没有多余的功能。
对于绝大多数 Java 学习 Jackson 是最有价值的投资。
