在 Java 中只用 JDK 自带的类库解析 JSON

在 Java 中,解析 JSON(JavaScript Object Notation)是一项常见的任务,它允许我们在应用程序中处理和交换数据。虽然 Java 标准库中没有提供专门用于 JSON 解析的类,但是可以使用 JDK 自带的类库以及第三方库来完成这项任务。

1. 了解 JSON

JSON 是一种轻量级的数据交换格式,易于阅读和编写。它由键值对组成,数据以键值对的形式存储,键和值之间用冒号分隔,每对键值对之间用逗号分隔,数据由大括号 {} 包围。

例如,一个简单的 JSON 数据如下所示:

java 复制代码
{
  "name": "John Doe",
  "age": 30,
  "city": "New York"
}

2. 使用 JDK 自带的类库解析 JSON

在 Java 中,我们可以使用 JDK 自带的类库 javax.json 来解析 JSON 数据。javax.json 包含了一组用于处理 JSON 数据的类和接口,包括 JsonObjectJsonArrayJsonReaderJsonWriter 等。

2.1 创建 JSON 解析器(JsonParser)
java 复制代码
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
import java.io.StringReader;

public class JsonParserExample {
    public static void main(String[] args) {
        // JSON 字符串
        String jsonString = "{\"name\":\"John Doe\",\"age\":30,\"city\":\"New York\"}";

        // 创建 JsonReader 对象
        JsonReader jsonReader = Json.createReader(new StringReader(jsonString));

        // 从 JsonReader 中读取 JsonObject
        JsonObject jsonObject = jsonReader.readObject();

        // 关闭 JsonReader
        jsonReader.close();

        // 输出解析后的 JsonObject
        System.out.println("Name: " + jsonObject.getString("name"));
        System.out.println("Age: " + jsonObject.getInt("age"));
        System.out.println("City: " + jsonObject.getString("city"));
    }
}
2.2 解析 JSON 数组(JsonArray)
java 复制代码
import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonReader;
import java.io.StringReader;

public class JsonArrayParserExample {
    public static void main(String[] args) {
        // JSON 数组字符串
        String jsonArrayString = "[\"apple\", \"banana\", \"orange\"]";

        // 创建 JsonReader 对象
        JsonReader jsonReader = Json.createReader(new StringReader(jsonArrayString));

        // 从 JsonReader 中读取 JsonArray
        JsonArray jsonArray = jsonReader.readArray();

        // 关闭 JsonReader
        jsonReader.close();

        // 输出解析后的 JsonArray
        for (int i = 0; i < jsonArray.size(); i++) {
            System.out.println(jsonArray.getString(i));
        }
    }
}
2.3 处理复杂的 JSON 结构

除了简单的键值对和数组外,JSON 还支持嵌套结构。我们可以使用 getJsonObjectgetJsonArray 方法来处理复杂的 JSON 结构。

java 复制代码
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
import java.io.StringReader;

public class NestedJsonParserExample {
    public static void main(String[] args) {
        // 嵌套的 JSON 字符串
        String nestedJsonString = "{\"person\":{\"name\":\"John Doe\",\"age\":30,\"address\":{\"city\":\"New York\",\"country\":\"USA\"}}}";

        // 创建 JsonReader 对象
        JsonReader jsonReader = Json.createReader(new StringReader(nestedJsonString));

        // 从 JsonReader 中读取 JsonObject
        JsonObject jsonObject = jsonReader.readObject();

        // 关闭 JsonReader
        jsonReader.close();

        // 获取嵌套的 JsonObject
        JsonObject personObject = jsonObject.getJsonObject("person");

        // 输出解析后的结果
        System.out.println("Name: " + personObject.getString("name"));
        System.out.println("Age: " + personObject.getInt("age"));

        // 获取嵌套的 JsonObject
        JsonObject addressObject = personObject.getJsonObject("address");
        System.out.println("City: " + addressObject.getString("city"));
        System.out.println("Country: " + addressObject.getString("country"));
    }
}

3. 使用示例

接下来,我们将使用一个更复杂的 JSON 数据示例,并使用上述代码解析它。

java 复制代码
{
  "name": "John Doe",
  "age": 30,
  "address": {
    "city": "New York",
    "country": "USA"
  },
  "languages": ["Java", "JavaScript", "Python"]
}
java 复制代码
import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.json.JsonReader;
import java.io.StringReader;

public class ComplexJsonParserExample {
    public static void main(String[] args) {
        // 复杂的 JSON 字符串
        String complexJsonString = "{\"name\":\"John Doe\",\"age\":30,\"address\":{\"city\":\"New York\",\"country\":\"USA\"},\"languages\":[\"Java\",\"JavaScript\",\"Python\"]}";

        // 创建 JsonReader 对象
        JsonReader jsonReader = Json.createReader(new StringReader(complexJsonString));

        // 从 JsonReader 中读取 JsonObject
        JsonObject jsonObject = jsonReader.readObject();

        // 关闭 JsonReader
        jsonReader.close();

        // 输出解析后的结果
        System.out.println("Name: " + jsonObject.getString("name"));
        System.out.println("Age: " + jsonObject.getInt("age"));

        // 获取嵌套的 JsonObject
        JsonObject addressObject = jsonObject.getJsonObject("address");
        System.out.println("City: " + addressObject.getString("city"));
        System.out.println("Country: " + addressObject.getString("country"));

        // 获取 JsonArray
        JsonArray languagesArray = jsonObject.getJsonArray("languages");
        System.out.println("Languages:");
        for (int i = 0; i < languagesArray.size(); i++) {
            System.out.println(" - " + languagesArray.getString(i));
        }
    }
}

本文详细介绍了如何使用 JDK 自带的类库 javax.json 来解析 JSON 数据。通过创建 JsonReader 对象并读取 JSON 数据,可以轻松地将 JSON 字符串解析为 Java 对象,从而在应用程序中进行进一步处理和操作。此外,还介绍了如何处理复杂的 JSON 结构,包括嵌套的对象和数组。通过学习和掌握这些技术,可以在 Java 应用程序中方便地处理 JSON 数据,实现更加灵活和强大的功能。

相关推荐
星空露珠1 天前
迷你世界UGc3.0脚本Wiki[剧情动画模块管理接口 Timeline]
开发语言·数据结构·算法·游戏·lua
格子软件1 天前
2026年分布式GEO代理流量调度:源码级状态机防重挂实战
java·vue.js·人工智能·spring boot·分布式·vue
hj2862511 天前
Docker 容器化技术标准化笔记
java·笔记·docker
PixelBai1 天前
JSON转表格使用教程:从入门到精通
json
未来之窗软件服务1 天前
计算机考试-C语言 应用题—东方仙盟
c语言·开发语言·仙盟创梦ide·东方仙盟·计算机考试
想你依然心痛1 天前
AtomCode在后端开发中的实战体验:Go微服务从零搭建
开发语言·微服务·golang
我是一颗柠檬1 天前
【Java项目技术亮点】EXPLAIN深度分析与慢查询治理
android·java·开发语言
万亿少女的梦1681 天前
基于Spring Boot的社区管理系统设计与实现
java·spring boot·mysql·vue·系统设计
luj_17681 天前
草酸与烟酸对消化及糖代谢的影响解析
服务器·c语言·开发语言·经验分享·算法
fei_sun1 天前
【SystemVerilog】SystemVerilog与C语言的接口
c语言·开发语言