Java中的JSON解析:从零到可运行代码
您是否曾经看着API返回的JSON数据感到一丝恐慌?“我该怎么从这里提取name?那个嵌套对象又该怎么处理?”——这些问题听起来很熟悉,对吧?别担心,您并不孤单。“How to parse JSON in Java”是Stack Overflow上最热门的问题之一,今天我们将一劳永逸地解决这个问题。
JSON(JavaScript对象表示法)是一种标准的数据交换格式。几乎每个现代服务——从天气预报到股票行情——都以JSON格式返回数据。能够熟练地解析JSON是Java开发人员的基本技能。我们不会阅读枯燥的规范文档。相反,我们将使用三个最流行的库:Gson(Google)、Jackson(FasterXML)和经典的org.json。您将看到不同方法的差异,并能够选择适合自己的工具。
阅读本文后您将获得什么?您将能够解析任何JSON——从简单的字符串到包含数组的复杂嵌套结构。我们开始吧!
准备工作:我们需要什么
在示例中,我们将使用一个简单的Maven项目。如果您不使用Maven也没关系,只需手动下载库的JAR文件即可。以下是pom.xml所需的最小依赖项:
<!-- Gson --><dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version></dependency>
<!-- Jackson --><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version></dependency>
<!-- org.json (简单) --><dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20231013</version></dependency>现在,假设我们从服务器收到了以下JSON(用户信息):
{ "id": 42, "name": "阿莉莎", "email": "alice@example.com", "isActive": true, "address": { "city": "莫斯科", "street": "特维尔大街" }, "hobbies": ["阅读", "编程", "骑自行车"]}我们的任务是将这个字符串转换为Java对象并提取所需字段。我们按顺序进行。
方法1:使用Gson解析Java中的JSON(简单而优雅)
Google的Gson可以说是Java中解析JSON最简单的方法。它的主要优势在于极简主义。您不需要编写大量代码。
步骤1. 创建一个与JSON结构对应的Java类(POJO)。
public class User { private int id; private String name; private String email; private boolean isActive; private Address address; private List<String> hobbies;
// Getter和Setter(Gson必需!) public int getId() { return id; } public void setId(int id) { this.id = id; }
public String getName() { return name; } public void setName(String name) { this.name = name; }
// ... 其余getter/setter类似}
public class Address { private String city; private String street; // getter/setter}步骤2. 用一行代码解析JSON。
import com.google.gson.Gson;
public class GsonExample { public static void main(String[] args) { String json = "{\\"id\\":42,\\"name\\":\\"阿莉莎\\",\\"email\\":\\"alice@example.com\\",\\"isActive\\":true,\\"address\\":{\\"city\\":\\"莫斯科\\",\\"street\\":\\"特维尔大街\\"},\\"hobbies\\":[\\"阅读\\",\\"编程\\",\\"骑自行车\\"]}";
Gson gson = new Gson(); User user = gson.fromJson(json, User.class);
System.out.print