JSON补丁:JSON-P 1.1概述系列
Java EE 8包括对JSON处理API的更新,并使其与JSON的最新IEFT标准保持同步。 他们是:
- JSON指针 RFC 6901
- JSON补丁 RFC 6902
- JSON合并修补程序RFC 7396
我将在这个迷你系列中涵盖这些主题。
入门
要开始使用JSON-P,您将需要Maven中央存储库中的以下依赖项。
<dependency><groupId>javax.json</groupId><artifactId>javax.json-api</artifactId><version>1.1</version>
</dependency><dependency><groupId>org.glassfish</groupId><artifactId>javax.json</artifactId><version>1.1</version>
</dependency>
JSON补丁
JSON修补程序表示要应用于目标JSON文档的一系列操作。 这些操作以JSON-Pointer表示法格式化,并且可以执行: 添加 , 复制 , 移动 , 删除 , 替换和测试操作。
JsonPatchBuilder接口是该API的网关,并且是通过Json类中的静态方法createPatchBuilder()创建的。 JSON指针表达式传递给其中一种操作方法,并应用于JSON文档。
替换操作
替换操作由replace()方法执行,并将要替换的元素的位置传递给它(表示为JSON指针表达式)和替换值。
{
"title": "Java EE: Only What's New",
"author": "Alex Theedom",
"chapters": ["Chapter 1: Java EE 8 What’s New Overview","Chapter 2: Java API for JSON Binding 1.0 (JSR 367)","Chapter 3: Java EE Security API 1.0 (JSR 375)"
],
"released": true,
"pages": 300,
"sourceCode": {"repositoryName": "Java-EE-8-Only-Whats-New","url": "github.com/readlearncode/"
},
"otherBooks": [{"title": "Professional Java EE Design Patterns","length": 350}
]
}JsonObject jsonObject = ... create JSONObject from JSON document ...;
在下面的代码段中(在上面的JSON文档中),使用JSON指针表达式/ chapters / 0表示的chapters数组的第一个元素的值替换为Chapter 1:Introduction的值。
JsonPatchBuilder builder = Json.createPatchBuilder();JsonPatch jsonPatch = builder.replace("/chapters/0", "Chapter 1: Introduction").build();JsonObject newJsonObject = jsonPatch.apply(jsonObject);
apply()方法返回JsonStructure类的实例。
添加和删除操作
JSON修补程序的一个关键功能是能够将多个操作链接在一起,并将它们顺序应用于先前的修补结果的功能。 如果在修补操作期间引发异常,它将停止操作,并且不会对原始JSON文档进行任何更改。
下面的代码示例显示了如何在JSON文档中添加和删除元素。
JsonObject newJsonObject = Json.createPatchBuilder().add("/chapters/3", "Chapter 4: Servlets 4.0").remove("/released").build().apply(jsonObject);
add()方法采用JSON指针表达式,该表达式标识要在其中插入新数据的元素。 第二个元素是要插入的新数据。
要删除元素,请将要删除的元素的JSON指针传递给remove()方法。
移动和复制操作
移动操作需要两个JSON指针表达式:
- 一个元素移动,
- 一个用于将值移动到的目标位置。
目标位置必须已经存在,并且遵循与添加操作相同的逻辑,从这个意义上说,目标位置是通过将元素移动到指定位置来将其移动。 有效地将所有元素下移一个位置。
复制操作将一个元素的值替换为另一个元素的值。 此操作还需要两个JSON指针表达式:一个用于源值,一个用于目标位置。
下面的代码片段将三个操作链接在一起:两个移动操作和一个复制操作。
JsonObject newJsonObject = Json.createPatchBuilder().move("/chapters/0", "/chapters/2").move("/chapters/2", "/chapters/1").copy("/otherBooks/0/length", "/pages").build().apply(jsonObject);
移动操作将位于章数组第三位置的值移动到第一位置,然后将第二位置的元素移动到第三位置。 复制操作会将 pages键的值复制到otherBooks数组中第一个元素的length键。
测试操作
测试操作确定是否在JSON文档中设置了指定的值。 如果测试失败,补丁操作将停止,否则它将继续并完成剩余的操作。
在代码段中,对元素/ pages进行了测试。 如果其值为300,则复制操作将继续,否则将抛出JsonException 。
JsonObject newJsonObject = Json.createPatchBuilder().test("/pages", 300).copy("/otherBooks/0/length", "/pages") // destination, source.build().apply(jsonObject);
结论
好了,这就是本微型系列文章的第二篇有关JSON处理的新功能。
目前为止就这样了。
翻译自: https://www.javacodegeeks.com/2018/04/get-to-know-json-patch-json-p-1-1-overview-series.html
JSON补丁:JSON-P 1.1概述系列相关推荐
- 认识JSON补丁:JSON-P 1.1概述系列
Java EE 8包括对JSON处理API的更新,并使其与JSON的最新IEFT标准保持同步. 他们是: JSON指针 RFC 6901 JSON补丁 RFC 6902 JSON合并修补程序RFC 7 ...
- JSON合并补丁:JSON-P 1.1概述系列
Java EE 8包括对JSON处理API的更新,并使其与JSON的最新IEFT标准保持同步. 他们是: JSON指针 RFC 6901 JSON补丁 RFC 6902 JSON合并修补程序 RFC ...
- JSON指针:JSON-P 1.1概述系列
Java EE 8包括对JSON处理API的更新,并使其与JSON的最新IEFT标准保持同步. 他们是: JSON指针 (RFC 6901) JSON修补程序(RFC 6902) JSON合并补丁(R ...
- JSON合并补丁程序:JSON-P 1.1概述系列
Java EE 8包括对JSON处理API的更新,并使其与JSON的最新IEFT标准保持同步. 他们是: JSON指针 RFC 6901 JSON补丁 RFC 6902 JSON合并修补程序 RFC ...
- 认识JSON绑定:概述系列
JSON绑定的Java API(JSON-B)1.0增强了Java EE平台对JSON数据交换格式的整体支持. 事实证明, 用于JSON处理的Java API(JSON-P)1.1十分流行,它们共同构 ...
- json解析适配模板_认识适配器:JSON绑定概述系列
json解析适配模板 适配器通过实现JsonbAdapter接口来配置自定义对象的创建和序列化. 方法AdaptToJson()和AdaptFromJson()被执行序列化和反序列化操作的逻辑覆盖. ...
- 认识适配器:JSON绑定概述系列
适配器通过实现JsonbAdapter接口来配置自定义对象的创建和序列化. 方法AdaptToJson()和AdaptFromJson()被执行序列化和反序列化操作的逻辑覆盖. 下一篇文章介绍了使用自 ...
- json阅读器_Flutter小说阅读器系列一:使用Bloc模式获取起点小说关键字提示
Bloc模式下的小说关键字提示效果图 最近难得有些闲暇时间,所以我又打算做一个小说阅读器,以前倒是用RN+Golang写了一个,不过当时太过放飞自我导致自己看起来都很费力,这次我准备换成Flutter ...
- Java系列之:ObjectMapper实现对象转化为Json、集合转化为Json、Json转化为对象、Json转化为JsonNode、JsonNode转化为Json字符串
Java系列之:ObjectMapper实现对象转化为Json.集合转化为Json.Json转化为对象.Json转化为JsonNode.JsonNode转化为Json字符串 一.创建类Dataset ...
最新文章
- js 自带的三种弹框
- gridcontrol值为0时设置为空_XASSET 4.0入门指南
- 腾讯员工吐槽:团队来了个阿里高p,瞬间会议变多,群多了
- Jobdu MM分水果
- 数据库个人优化学习记录
- POJ 3635 Full Tank?
- 微服务架构的 10个 最佳实践 !
- win7 NVMe驱动 SSD固态硬盘 补丁 免重装 DISM++ Windows6.1-KB3087873-v2-x64.msu
- 计算机打印字与印刷字的大小,[转载]实际大小、实际印刷大小 字号 磅数 尺寸对照表及图片...
- c语言牛顿法求整数平方根,牛顿法求平方根-编程练习
- JPA-Specification 实现复杂查询
- 使用unity编写简单的弹幕游戏【ten seconds】
- codewars练习(javascript)-2021/2/5
- vue + 高德原生 API实现地图可视化
- 互动广告助您抢量成功
- 股市基础知识、主力战法【一.2】
- Java调用opencv实现图片去水印
- 煮酒论语言 -- 曹孟德黑尽天下语言
- SpringBoot 日志(学习笔记13)
- 男生的头发,隔多长时间理一次发最适合
热门文章
- 正则表达式真的很骚,可惜你不会写
- FileDescriptor的作用
- mysql中如何将默认用户名root改成其他?
- python常见内置函数
- Mybatis入门 使用XML
- java 取随机正整数_Java获取随机数
- java中生成1000~10000之间的随机数
- java速学_5分钟快速入门Java,不看真的可惜了
- impdp导入mysql_Oracle数据库的impdp导入操作以及dba_directories使用方法
- angular1.2.27_Angular 8 + Spring Boot 2.2:立即构建一个CRUD应用程序!