什么是JSON,为什么在Java中需要它?
JSON(JavaScript对象表示法)是一种轻量级的数据交换格式,易于人类阅读,也易于程序处理。在现代Java开发中,JSON被广泛使用:从配置文件到Web服务的API请求。
在Java中处理JSON包含两个主要操作:
- 序列化 — 将Java对象转换为JSON字符串。
- 解析(反序列化) — 将JSON字符串转换回Java对象。
在本教程中,我们将学习如何使用两个流行的库来执行这些操作:Jackson 和 Gson。示例同样适合初学者开发者。
项目准备与库的引入
首先,我们需要一个Java项目。我们将使用Maven来管理依赖。创建一个新的Maven项目,并在pom.xml文件中添加以下依赖:
添加Jackson
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.17.1</version></dependency>添加Gson
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.11.0</version></dependency>这两个库可以在同一个项目中同时使用。更新Maven后,依赖将自动下载。
创建示例用的Java类
为了演示,我们创建一个简单的User类,用于序列化和解析:
public class User { private String name; private int age; private String email;
// 反序列化必须有无参构造函数 public User() {}
public User(String name, int age, String email) { this.name = name; this.age = age; this.email = email; }
// Getter和Setter(Jackson必须) 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; }}重要提示: 为了让库正常工作,类必须包含:
- 无参构造函数(没有参数)。
- 所有字段的Getter和Setter(Jackson必须,Gson至少需要Getter)。
将Java对象序列化为JSON
序列化是将对象转换为字符串的过程。我们来看两种方法。
使用Jackson的示例
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonExample { public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); User user = new User("安娜", 25, "anna@example.com");
// 序列化为字符串 String json = mapper.writeValueAsString(user); System.out.println(json); }}执行结果:
{"name":"安娜","age":25,"email":"anna@example.com"}使用Gson的示例
import com.google.gson.Gson;
public class GsonExample { public static void main(String[] args) { Gson gson = new Gson(); User user = new User("安娜", 25, "anna@example.com");
// 序列化为字符串 String json = gson.toJson(user); System.out.println(json); }}结果相同。两个库都能很好地完成这项任务。