添加依赖库
你需要在你的项目中添加相应库的依赖,如果你使用 Maven 或 Gradle,可以这样添加:

(图片来源网络,侵删)
使用 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' // 建议使用最新版本
使用 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' // 建议使用最新版本
将 JSON 字符串转换为 JsonObject 或 JsonElement (Gson)
当你只想解析一个 JSON 字符串并像操作 Map 一样访问其内容时,Gson 的 JsonObject 非常方便。
代码示例
假设我们有以下 JSON 字符串:
{
"name": "张三",
"age": 30,
"isStudent": false,
"courses": ["Java", "Python"],
"address": {
"city": "北京",
"street": "中关村大街1号"
}
}
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonArray;
public class GsonStringToJsonExample {
public static void main(String[] args) {
String jsonString = "{\"name\":\"张三\",\"age\":30,\"isStudent\":false,\"courses\":[\"Java\",\"Python\"],\"address\":{\"city\":\"北京\",\"street\":\"中关村大街1号\"}}";
// 1. 创建 Gson 实例
Gson gson = new Gson();
// 方法一:直接解析为 JsonObject (更推荐,代码更简洁)
JsonObject jsonObject = gson.fromJson(jsonString, JsonObject.class);
// 方法二:使用 JsonParser (旧版本Gson常用,同样有效)
// JsonElement jsonElement = JsonParser.parseString(jsonString);
// JsonObject jsonObject = jsonElement.getAsJsonObject();
// 2. 从 JsonObject 中获取数据
String name = jsonObject.get("name").getAsString();
int age = jsonObject.get("age").getAsInt();
boolean isStudent = jsonObject.get("isStudent").getAsBoolean();
System.out.println("姓名: " + name);
System.out.println("年龄: " + age);
System.out.println("是否是学生: " + isStudent);
// 3. 获取数组
JsonArray coursesArray = jsonObject.getAsJsonArray("courses");
System.out.print("课程: ");
for (int i = 0; i < coursesArray.size(); i++) {
System.out.print(coursesArray.get(i).getAsString() + " ");
}
System.out.println();
// 4. 获取嵌套的 JsonObject
JsonObject addressObject = jsonObject.getAsJsonObject("address");
String city = addressObject.get("city").getAsString();
String street = addressObject.get("street").getAsString();
System.out.println("地址: " + city + ", " + street);
}
}
输出:
姓名: 张三
年龄: 30
是否是学生: false
课程: Java Python
地址: 北京, 中关村大街1号
将 JSON 字符串转换为 Java 对象 (POJO)
这是更常用、更规范的方式,你首先需要创建一个与 JSON 结构对应的 Java 类(POJO - Plain Old Java Object),Gson/Jackson 可以自动将 JSON 字符串填充到这个对象中。

(图片来源网络,侵删)
创建 Java 类 (POJO)
// User.java
public class User {
private String name;
private int age;
private boolean isStudent;
private String[] courses; // 也可以使用 List<String>
private Address address;
// 必须有无参构造函数
public User() {
}
// Getters and Setters (非常重要)
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 boolean isStudent() { return isStudent; }
public void setStudent(boolean student) { isStudent = student; }
public String[] getCourses() { return courses; }
public void setCourses(String[] courses) { this.courses = courses; }
public Address getAddress() { return address; }
public void setAddress(Address address) { this.address = address; }
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", isStudent=" + isStudent +
", courses=" + Arrays.toString(courses) +
", address=" + address +
'}';
}
}
// Address.java
public class Address {
private String city;
private String street;
// 必须有无参构造函数
public Address() {
}
// Getters and Setters
public String getCity() { return city; }
public void setCity(String city) { this.city = city; }
public String getStreet() { return street; }
public void setStreet(String street) { this.street = street; }
@Override
public String toString() {
return "Address{" +
"city='" + city + '\'' +
", street='" + street + '\'' +
'}';
}
}
使用 Gson 进行转换
import com.google.gson.Gson;
public class GsonPojoExample {
public static void main(String[] args) {
String jsonString = "{\"name\":\"张三\",\"age\":30,\"isStudent\":false,\"courses\":[\"Java\",\"Python\"],\"address\":{\"city\":\"北京\",\"street\":\"中关村大街1号\"}}";
Gson gson = new Gson();
User user = gson.fromJson(jsonString, User.class);
// 现在你可以直接使用 user 对象,就像操作任何其他 Java 对象一样
System.out.println("姓名: " + user.getName());
System.out.println("年龄: " + user.getAge());
System.out.println("地址: " + user.getAddress().getCity());
// 打印整个对象
System.out.println(user);
}
}
输出:
姓名: 张三
年龄: 30
地址: 北京
User{name='张三', age=30, isStudent=false, courses=[Java, Python], address=Address{city='北京', street='中关村大街1号'}}
使用 Jackson 进行转换
Jackson 的用法与 Gson 非常相似,核心类是 ObjectMapper。
转换为 JsonNode (类似 Gson 的 JsonObject)
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonStringToJsonExample {
public static void main(String[] args) throws Exception {
String jsonString = "{\"name\":\"张三\",\"age\":30,\"isStudent\":false,\"courses\":[\"Java\",\"Python\"],\"address\":{\"city\":\"北京\",\"street\":\"中关村大街1号\"}}";
// 1. 创建 ObjectMapper 实例
ObjectMapper mapper = new ObjectMapper();
// 2. 将字符串解析为 JsonNode
JsonNode rootNode = mapper.readTree(jsonString);
// 3. 从 JsonNode 中获取数据
String name = rootNode.get("name").asText();
int age = rootNode.get("age").asInt();
boolean isStudent = rootNode.get("isStudent").asBoolean();
System.out.println("姓名: " + name);
System.out.println("年龄: " + age);
System.out.println("是否是学生: " + isStudent);
// 获取嵌套节点
JsonNode addressNode = rootNode.get("address");
String city = addressNode.get("city").asText();
System.out.println("地址: " + city);
}
}
转换为 Java 对象 (POJO)
Jackson 使用完全相同的 User.java 和 Address.java 类。
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonPojoExample {
public static void main(String[] args) throws Exception {
String jsonString = "{\"name\":\"张三\",\"age\":30,\"isStudent\":false,\"courses\":[\"Java\",\"Python\"],\"address\":{\"city\":\"北京\",\"street\":\"中关村大街1号\"}}";
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(jsonString, User.class);
System.out.println("姓名: " + user.getName());
System.out.println("年龄: " + user.getAge());
System.out.println("地址: " + user.getAddress().getCity());
System.out.println(user);
}
}
总结与对比
| 特性 | Google Gson | Jackson |
|---|---|---|
| 易用性 | 非常简单,API 直观,特别是 JsonObject 的使用。 |
非常强大,API 功能丰富,但学习曲线稍陡一点。 |
| 性能 | 性能良好,但在某些极端场景下可能略逊于 Jackson。 | 性能极高,是业界公认最快的 JSON 处理库之一,尤其在处理大数据时。 |
| 灵活性 | 非常灵活,可以轻松处理 JsonObject 和 POJO 的混合场景。 |
非常灵活,提供了大量注解(如 @JsonProperty, @JsonFormat)来精确控制序列化和反序列化过程。 |
| 生态系统 | 广泛使用,社区活跃。 | 事实上的行业标准,Spring Framework 等众多顶级框架都内置使用 Jackson。 |
| 推荐场景 | - 快速原型开发 - 项目对性能要求不是极致 - 喜欢 API 简洁性 |
- 高性能要求的 Web 应用 (如 REST API) - 大型企业级应用 - Spring 生态系统项目 |
最终建议
- 如果你是初学者,或者项目追求快速开发和简洁的代码,Gson 是一个绝佳的选择。
- 如果你在构建高性能的后端服务,或者你已经在使用 Spring 框架,Jackson 是不二之选,它是事实上的标准。
- 无论选择哪个,将 JSON 字符串映射到具体的 Java 对象(POJO) 是最佳实践,因为它提供了类型安全和更好的代码可维护性。
