在 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 数据,实现更加灵活和强大的功能。

相关推荐
人才程序员23 分钟前
【C++拓展】vs2022使用SQlite3
c语言·开发语言·数据库·c++·qt·ui·sqlite
极客先躯32 分钟前
高级java每日一道面试题-2025年01月23日-数据库篇-主键与索引有什么区别 ?
java·数据库·java高级·高级面试题·选择合适的主键·谨慎创建索引·定期评估索引的有效性
码至终章35 分钟前
kafka常用目录文件解析
java·分布式·后端·kafka·mq
Mr.Demo.39 分钟前
[Spring] Nacos详解
java·后端·spring·微服务·springcloud
梁雨珈1 小时前
PL/SQL语言的图形用户界面
开发语言·后端·golang
励志的小陈1 小时前
C语言-----扫雷游戏
c语言·开发语言·游戏
luoganttcc1 小时前
华为升腾算子开发(一) helloword
java·前端·华为
martian6651 小时前
第19篇:python高级编程进阶:使用Flask进行Web开发
开发语言·python
Dlwyz1 小时前
Maven私服-Nexus3安装与使用
java·maven
智_永无止境1 小时前
Springboot使用war启动的配置
java·spring boot·后端·war