用于 JSON Processing 1.0 的 Java API (JSR 353) 是一个低级别的轻量级 JSON 解析器和生成器,可提供在属性和值级别操作 JSON 数据的能力。
JSR 353 提供了两种 JSON 处理模型:对象模型和流模型。两种模型都可以生成 JSON 数据并将其输出到流中,例如平面文件,并且两种模型都可以读取数据。但是,流模型在处理大量 JSON 数据时特别有效。这允许实现数据导入功能和动态转换此类数据。
但是,流模型在处理大量 JSON 数据时特别有效。这允许实现数据导入功能和动态转换此类数据。
javax.json 包提供了用于处理 JSON 数据的对象模型 API。它包括为 JSON 读取器和写入器建模 JSON 结构和工厂的类。
对象模型将构成 JSON 数据结构的元素表示为对象。例如,一个 JSON 数组由 javax.json.JsonArray 类表示,而该类又实现了 List 接口。
JSON 对象由实现 Map 接口的 javax.json.JsonObject 类表示。
javax.json.Json 类包括各种创建 JsonGenerator、JsonParser 和 JsonReader 实例的工厂方法。
以下代码片段从 JSON 文档创建一个 JSONObject 实例,然后从其属性中检索数据。
1: private String json = "{\"id\": 123456, \"title\": \"Fun with JSON-Processing\", \"published\": true}"; 2: JsonReader jsonReader = Json.createReader(new StringReader(json)); 3: JsonObject jsonObject = jsonReader.readObject(); 4: jsonReader.close(); 5: jsonObject.getInt("id") 6: jsonObject.getString("title") 7: jsonObject.getBoolean("published")
第 1 行是我要处理的 JSON 文档。我创建了一个 StringReader 对象的实例,并将 JSON 文档传递给它,我通过 createReader() 静态方法将其传递给 JsonReader。
我在第 3 行将 JSON 文档读入 JsonObject 实例,并在第 4 行关闭阅读器。
现在我有了一个 JsonObject,我可以通过将属性名称传递给 getString() 方法来读取 JSON 属性的值。
此示例的代码存储在本文随附的 GitHub 存储库 中。
javax.json.streaming 包提供解析和生成 JSON 数据的 Streaming 模型 API。它包括用于创建解析器和生成器的工厂。
它的实现方式完全不同,而且级别较低。在其核心,有两个生成和解析 JSON 数据的主要工厂,它们是 JsonGeneratorFactory 和 JsonParserFactory。这些工厂面向写入和读取数据流。
JSON 数据的写入是通过将数据添加到缓冲区的链接方法完成的,然后通过调用 flush 或 close 方法将其刷新到输出流。
JSON 数据以流式方式解析,旨在成为读取 JSON 数据的最高效方式。解析器是从 InputStream 或 Reader 输入源创建的。
以下代码片段通过使用 JsonObjectBuilder 上的构建器方法构造它来创建一个 JSONObject 实例,然后它从 JsonObject 检索数据。
1: JsonObject jsonObject = Json.createObjectBuilder() .add("id", 123456) .add("title", "Fun with JSON-Processing") .add("published", true) .build(); 2: jsonObject.getInt("id") 3: jsonObject.getString("title") 4: jsonObject.getBoolean("published")
在第 1 行构建了 JsonObject。如您所见,它从 Json 类调用静态 createObjectBuilder() 方法,我为 JsonObject有。在本例中,我需要三个属性:id、title 和 published。最后一个方法是构造 JsonObject 的 build() 方法。
第 2 到 4 行调用了第 1 行构建的 JsonObject 上的 getter 方法,并像我在上一个示例中所做的那样一一检索属性值。
此示例的代码存储在本文随附的 GitHub 存储库 中。
如果您喜欢这篇文章,您将会喜欢我为 Lynde.com 录制的新使用 Java EE 进行 JSON 处理 课程。在本课程中,我将通过整个 API 深入了解对象和流模型。我使用大量代码示例并为您设置挑战以帮助您提高学习水平。
我经常发布有关 Java EE 技术的帖子,因此您可能对以下内容感兴趣:
标签2: Java教程地址:https://www.cundage.com/article/jcg-json-processing-json-p-api.html