Java EE中的JSON-P简介
JSON处理1.0( JSR 353 )的Java API是一个低级,轻量级的JSON解析器和生成器,它提供了在属性和值级别上操作JSON数据的能力。
JSR 353提供了两种JSON处理模型: 对象模型和流模型。 两种模型都可以生成JSON数据并将其输出到流(例如平面文件)中,并且两种模型都可以读取数据。 但是,流模型在处理大量JSON数据时特别有效。 这允许实现数据导入功能以及即时转换此类数据。
但是,流模型在处理大量JSON数据时特别有效。 这允许实现数据导入功能以及即时转换此类数据。
JSON-P对象模型
javax.json包提供了用于处理JSON数据的对象模型API。 它包括为JSON结构建模的类和用于JSON读取器和写入器的工厂。
Object模型将构成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存储库中。
JSON-P流模型
javax.json.streaming包提供了解析和生成JSON数据的Streaming模型API。 它包括用于创建解析器和生成器的工厂。
它的实现方式完全不同,而且级别较低。 从本质上讲 ,有两个主要的工厂来生成和解析JSON数据,它们是JsonGeneratorFactory和JsonParserFactory 。 这些工厂面向写入和读取数据流。
通过链接将数据添加到缓冲区的方法,然后通过调用flush或close方法将其刷新到输出流,来完成JSON数据的写入。
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拥有的多个属性调用add方法。 在这种情况下,我需要三个属性:id,title和published。 最后一个方法是build()方法,该方法构造JsonObject 。
第2到4行在JsonObject的第1行上建立了getter方法,并像上一个示例一样一一检索属性值。
此示例的代码存储在此文章随附的GitHub存储库中。
接下来是什么?
如果您喜欢本文,您将喜欢我为Lynde.com录制的新的Java EE JSON处理课程。 在本课程中,我将深入研究整个API,将其视为对象和流模型。 我使用了大量的代码示例,并给您设置挑战,以帮助您提高学习效率。
进一步阅读
我经常发布有关Java EE技术的文章,因此您可能对以下内容感兴趣:
- 上下文和依赖注入
- 企业Java Bean
- JSP,JSP和表达语言
- RESTful Web服务
翻译自: https://www.javacodegeeks.com/2017/09/json-processing-json-p-api.html