Java中JSON处理入门
JSON(JavaScript对象表示法)是一种轻量级的数据交换格式,广泛应用于现代Web应用程序、API和微服务中。在Java中,JSON处理是开发中不可或缺的一部分:从读取配置文件到与RESTful服务交互。在本文中,我们将通过实践讲解如何使用两个最流行的库:Jackson和Gson,执行解析(将JSON转换为Java对象)和序列化(将Java对象转换为JSON)。
我们将研究真实的代码示例,学习如何处理嵌套结构,并分析典型错误。到本文结束时,您将能够在任何Java项目中自信地处理JSON。
1. 主要的JSON处理库
Jackson vs Gson:如何选择?
Java市场上有多个JSON处理库,但其中两个已成为事实上的标准:
- Jackson — 性能更高、功能更丰富的库。支持注解、流式处理和自定义序列化器。推荐用于企业级项目。
- Gson — 来自Google的简单轻量级库。非常适合小型项目和快速原型开发。
要使用其中任何一个,只需在pom.xml(Maven)或build.gradle(Gradle)中添加依赖即可。
添加Jackson依赖(Maven)
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version></dependency>添加Gson依赖(Maven)
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version></dependency>2. JSON解析:从字符串到Java对象
解析是将JSON字符串转换为Java对象的过程。我们以简单的User类为例,介绍两种方法。
创建数据模型
public 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; }}使用Jackson进行解析
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonParsingExample { public static void main(String[] args) throws Exception { String json = "{\\"name\\":\\"伊万\\",\\"age\\":30,\\"email\\":\\"ivan@example.com\\"}"; ObjectMapper mapper = new ObjectMapper(); User user = mapper.readValue(json, User.class); System.out.println("姓名: " + user.getName()); System.out.println("年龄: " + user.getAge()); }}使用Gson进行解析
import com.google.gson.Gson;
public class GsonParsingExample { public static void main(String[] args) { String json = "{\\"name\\":\\"玛丽亚\\",\\"age\\":25,\\"email\\":\\"maria@example.com\\"}"; Gson gson = new Gson(); User user = gson.fromJson(json, User.class); System.out.println("姓名: " + user.getName()); System.out.println("邮箱: " + user.getEmail()); }}3. 序列化:从Java对象到JSON
序列化是相反的过程:我们将Java对象转换为JSON字符串。例如,这在