在Java中处理JSON:面向初学者的解析与序列化

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是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); }}


结果相同。两个库都能很好地完成这项任务。

博客

书籍推荐