什么是 JSON 处理 (JSON-P API)?

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(225)   2024-01-14 16:34:57

Java EE 中的 JSON-P 简介

用于 JSON Processing 1.0 的 Java API (JSR 353) 是一个低级别的轻量级 JSON 解析器和生成器,可提供在属性和值级别操作 JSON 数据的能力。

JSR 353 提供了两种 JSON 处理模型:对象模型和模型。两种模型都可以生成 JSON 数据并将其输出到流中,例如平面文件,并且两种模型都可以读取数据。但是,流模型在处理大量 JSON 数据时特别有效。这允许实现数据导入功能和动态转换此类数据。

但是,流模型在处理大量 JSON 数据时特别有效。这允许实现数据导入功能和动态转换此类数据。

JSON-P 对象模型

javax.json 包提供了用于处理 JSON 数据的对象模型 API。它包括为 JSON 读取器和写入器建模 JSON 结构和工厂的类。

对象模型将构成 JSON 数据结构的元素表示为对象。例如,一个 JSON 数组由 javax.json.JsonArray 类表示,而该类又实现了 List 接口。

JSON 对象由实现 Map 接口的 javax.json.JsonObject 类表示。

javax.json.Json 类包括各种创建 JsonGeneratorJsonParserJsonReader 实例的工厂方法。

以下代码片段从 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 存储库 中。

JSON-P 流模型

javax.json.streaming 包提供解析和生成 JSON 数据的 Streaming 模型 API。它包括用于创建解析器和生成器的工厂。

它的实现方式完全不同,而且级别较低。在其核心,有两个生成和解析 JSON 数据的主要工厂,它们是 JsonGeneratorFactoryJsonParserFactory。这些工厂面向写入和读取数据流。

JSON 数据的写入是通过将数据添加到缓冲区的链接方法完成的,然后通过调用 flush 或 close 方法将其刷新到输出流。

JSON 数据以流式方式解析,旨在成为读取 JSON 数据的最高效方式。解析器是从 InputStreamReader 输入源创建的。

以下代码片段通过使用 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。最后一个方法是构造 JsonObjectbuild() 方法。

第 2 到 4 行调用了第 1 行构建的 JsonObject 上的 getter 方法,并像我在上一个示例中所做的那样一一检索属性值。

此示例的代码存储在本文随附的 GitHub 存储库 中。

接下来是什么?

如果您喜欢这篇文章,您将会喜欢我为 Lynde.com 录制的新使用 Java EE 进行 JSON 处理 课程。在本课程中,我将通过整个 API 深入了解对象和流模型。我使用大量代码示例并为您设置挑战以帮助您提高学习水平。

进一步阅读

我经常发布有关 Java EE 技术的帖子,因此您可能对以下内容感兴趣:

  • 上下文和依赖注入 (CDI)
  • 企业 Java Beans (EJB)
  • JSP、JSP 和表达式语言
  • RESTful 网络服务
标签2: Java教程
地址:https://www.cundage.com/article/jcg-json-processing-json-p-api.html

相关阅读

Java HashSet 教程展示了如何使用 Java HashSet 集合。 Java哈希集 HashSet 是一个不包含重复元素的集合。此类为基本操作(添加、删除、包含和大小)提供恒定时间性...
SpringApplicationBuilder 教程展示了如何使用 SpringApplicationBuilder 创建一个简单的 Spring Boot 应用程序。 春天 是用于创建企业应...
通道是继 buffers 之后 java.nio 的第二个主要新增内容,我们在之前的教程中已经详细了解了这一点。通道提供与 I/O 服务的直接连接。 通道是一种在字节缓冲区和通道另一端的实体(通...
课程大纲 Elasticsearch 是一个基于 Lucene 的搜索引擎。它提供了一个分布式的、支持多租户的全文搜索引擎,带有 HTTP Web 界面和无模式的 JSON 文档。 Elasti...
解析器是强大的工具,使用 ANTLR 可以编写可用于多种不同语言的各种解析器。 在这个完整的教程中,我们将: 解释基础:什么是解析器,它可以用来做什么 查看如何设置 ANTLR 以便在 Java...
Java 是用于开发各种桌面应用程序、Web 应用程序和移动应用程序的最流行的编程语言之一。以下文章将帮助您快速熟悉 Java 语言,并迈向 API 和云开发等更复杂的概念。 1. Java语言...
Java中的继承是指子类继承或获取父类的所有非私有属性和行为的能力。继承是面向对象编程的四大支柱之一,用于提高层次结构中类之间的代码可重用性。 在本教程中,我们将了解 Java 支持的继承类型,...
Java Message Service 是一种支持正式通信的 API,称为 网络上计算机之间的消息传递。 JMS 为支持 Java 程序的标准消息协议和消息服务提供了一个通用接口。 JMS 提...
之前,我介绍了spring 3 + hibernate 集成 示例和struts 2 hello world 示例。在本教程中,我将讨论在将 spring 框架与 struts 与 hibern...
Java 项目中的一项常见任务是将日期格式化或解析为字符串,反之亦然。解析日期意味着你有一个代表日期的字符串,例如“2017-08-3”,你想把它转换成一个代表 Java 中日期的对象,例如Ja...