认识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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql驱动连接不了mariadb_无法从振动应用程序连接到MySQL / MariaDB数据库

如果我使用自定义main(void main()而不是shared static this()),一切正常.使用默认主菜单时出现“访问冲突”错误.它看起来像MySQL不允许从localhost连接到它,但在my.ini中我添加了字符串&#xff1a;bind-address 127.0.0.1代码,如果有帮助&#xff1a;import std.stdio;impo…

什么是自然数

自然数是指用以计量事物的件数或表示事物次序的数。即用数码 0&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;4……所表示的数。自然数由 0 开始&#xff0c;一个接一个&#xff0c;组成一个无穷的集体。自然数有有序性&#xff0c;无限性。分为偶数和奇数&#xff0c;合…

angular jwt_Angular5 JWT身份验证(Spring Boot安全性)

angular jwt欢迎使用带有Spring Security的angular5 jwt身份验证。在本教程中&#xff0c;我们将在一个angular5单页应用程序中使用jwt身份验证创建一个全栈应用程序&#xff0c;该应用程序具有由spring boot支持并支持spring security集成的后备服务器。带有集成了HttpInterce…

impacket安装 python_Impacket网络协议工具包介绍

Impacket是一个Python类库&#xff0c;用于对SMB1-3或IPv4 / IPv6 上的TCP、UDP、ICMP、IGMP&#xff0c;ARP&#xff0c;IPv4&#xff0c;IPv6&#xff0c;SMB&#xff0c;MSRPC&#xff0c;NTLM&#xff0c;Kerberos&#xff0c;WMI&#xff0c;LDAP等协议进行低级编程访问。…

什么是实数?

文章目录什么是实数有理数无理数实数的运算什么是实数 实数就是所有的有理数与无理数的集合&#xff0c;在数轴上&#xff0c;我们可以一一找到与实数相对应的点&#xff0c;更加具体化来说&#xff0c;实数也就是有限小数(整数也可以被看成是小数部位为零的小数)和无限小数的…

朝着理想坚实迈进_坚实原则:接口隔离原则

朝着理想坚实迈进以前&#xff0c;我们研究了liskov替代原理。 下一个原则是接口隔离 。 接口隔离原则&#xff08;ISP&#xff09;指出&#xff0c;不应强迫任何客户端依赖其不使用的方法。 想象一下&#xff0c;在我们的代码库中有很多方法的接口&#xff0c;尽管只有一部分…

mysql动态标签可以嵌套吗_Mysql动态嵌套游标

欢迎进入Linux社区论坛&#xff0c;与200万技术人员互动交流 >>进入 前提&#xff1a; 表一、 ddm_demand system_id demand_id quotate_end_team 1 1 team1,team5,team2 1 2 tea3,team1,team,4 pk:quotate_end_team、demand_id; 表二、 mc_team team_nam view_order tea…

什么是分数

分数原是指整体的一部分&#xff0c;或更一般地&#xff0c;任何数量相等的部分。表现形式为一个整数a和一个整数b的比&#xff08;a为b倍数的假分数是否属于分数存在争议&#xff09;。 分数表示一个数是另一个数的几分之几&#xff0c;或一个事件与所有事件的比例。把单位“1…

朝着理想坚实迈进_坚实原则:单一责任原则

朝着理想坚实迈进单一责任原则是首字母缩写词的第一原则。 “班级应该只有一个改变的理由。” 每个模块或类都应对软件提供的功能的单个部分负责&#xff0c;并且该责任应由类完全封装。 例如&#xff0c;想象一下导航软件的场景。 我们根据给定的方向&#xff08;北&#…

什么是代数数

代数数是代数与数论中的重要概念&#xff0c;指任何整系数多项式的复根。 所有代数数的集合构成一个域&#xff0c;称为代数数域。 不是代数数的数称为超越数&#xff0c;例如&#xff1a;圆周率 π、自然对数的底数 e。

oracle 容器运行_Oracle应用容器云的自由

oracle 容器运行在这篇博客文章中&#xff0c;我将介绍如何部署CloudEE封装在杜克大学应用自由尤伯杯罐子Oracle应用集装箱云端 。 在Oracle Application Container Cloud中进行部署所需的部署工件是一个ZIP归档文件&#xff0c;其中包含应用程序ber-jar和清单文件&#xff08…

为什么SpringBoot如此受欢迎?如何有效地学习SpringBoot?

SpringBoot是最流行和使用最广泛的Java框架。 有时&#xff0c;这种讨论“为什么SpringBoot如此受欢迎&#xff1f;” 来我和我的朋友/同事之间。 另外&#xff0c;我确实收到了许多人发来的电子邮件&#xff0c;询问“春天是巨大的&#xff0c;如何快速学习它&#xff1f;” 。…

树莓派python交互界面实例_玩转树莓派-RaspBerry,使用Python开发定制界面

1 准备SD卡8G以上&#xff0c;16G更佳。编译过程中&#xff0c;会耗用大量存储空间。一定在编译之前运行sudo raspi-config&#xff0c;选择expand file system扩展SD卡的分区。如果空间不够&#xff0c;会导致运行挂起。使用df -h可查看存储卡的可用容量。2 更新资源的索引清单…

什么是无理数

无理数”就是不能精确表示为两个整数之比的数&#xff0c;而并非没有道理。 无理数&#xff0c;也称为无限不循环小数&#xff0c;不能写作两整数之比。若将它写成小数形式&#xff0c;小数点之后的数字有无限多个&#xff0c;并且不会循环。 常见的无理数有非完全平方数的平方…

java依赖_java 依赖、组合、聚合与继承

java中类与类之间的关系大部分的初学者只知道java中两个类之间可以是继承与被继承的关系&#xff0c;可是事实上&#xff0c;类之间的关系大体上存在五种—继承(实现)、依赖、关联、聚合、组合。接下来&#xff0c;简单的分析一下这些关系。继承(实现)对于类来说&#xff0c;这…

获取 RPM 包常用站点

获取需要的 RPM 包常用站点&#xff1a; http://mirrors.sohu.com http://rpmfind.net http://rpm.pbone.net/

java 多线程和并行编程_Java 8中的并行和异步编程

java 多线程和并行编程并行代码是在多个线程上运行的代码&#xff0c;曾经是许多经验丰富的开发人员的噩梦&#xff0c;但是Java 8带来了许多更改&#xff0c;这些更改应该使这种提高性能的窍门更加易于管理。 并行流 在Java 8之前&#xff0c;并行&#xff08;或并发&#xf…

java bi报表工具_7款顶级开源BI(商务智能)软件和报表工具

在这个信息化时代&#xff0c;每分每秒都产生海量数据。在海量数据中&#xff0c;挖掘出有用的数据&#xff0c;并且能以较人性化、直观的方式展示这些数据&#xff0c;变得尤为重要。本文将介绍 7款顶级开源 BI(商务智能)软件和报表工具&#xff0c;用于商业数据的分析处理&am…

Linux命令之 DNF -- 新一代的 RPM 软件包管理器

文章目录一、命令介绍二、安装 DNF三、DNF 命令&#xff08;一&#xff09;主要命令1. 安装、升级和删除软件包2. 查询和检查软件包3. 执行其它功能&#xff08;二&#xff09;插件命令四、选项参数五、命令示例&#xff08;一&#xff09;安装、升级和删除软件包安装软件包安装…

抽取大小: 高斯sigma_无服务器:SLAppForge Sigma入门

抽取大小: 高斯sigma&#xff01; Cmere。 寻找某事&#xff1f; 无服务器&#xff0c;是吗&#xff1f; 在上面。 进入海峡&#xff0c;在“ Sigma”标志处右转。 &#xff08;嗯&#xff0c;还不要怪我们&#xff1b;至少我们认为这很容易&#xff01;&#xff09; 我们…