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概述系列相关推荐

  1. JSON补丁:JSON-P 1.1概述系列

    Java EE 8包括对JSON处理API的更新,并使其与JSON的最新IEFT标准保持同步. 他们是: JSON指针 RFC 6901 JSON补丁 RFC 6902 JSON合并修补程序RFC 7 ...

  2. JSON合并补丁:JSON-P 1.1概述系列

    Java EE 8包括对JSON处理API的更新,并使其与JSON的最新IEFT标准保持同步. 他们是: JSON指针 RFC 6901 JSON补丁 RFC 6902 JSON合并修补程序 RFC ...

  3. JSON指针:JSON-P 1.1概述系列

    Java EE 8包括对JSON处理API的更新,并使其与JSON的最新IEFT标准保持同步. 他们是: JSON指针 (RFC 6901) JSON修补程序(RFC 6902) JSON合并补丁(R ...

  4. JSON合并补丁程序:JSON-P 1.1概述系列

    Java EE 8包括对JSON处理API的更新,并使其与JSON的最新IEFT标准保持同步. 他们是: JSON指针 RFC 6901 JSON补丁 RFC 6902 JSON合并修补程序 RFC ...

  5. json解析适配模板_认识适配器:JSON绑定概述系列

    json解析适配模板 适配器通过实现JsonbAdapter接口来配置自定义对象的创建和序列化. 方法AdaptToJson()和AdaptFromJson()被执行序列化和反序列化操作的逻辑覆盖. ...

  6. 认识JSON绑定:概述系列

    JSON绑定的Java API(JSON-B)1.0增强了Java EE平台对JSON数据交换格式的整体支持. 事实证明, 用于JSON处理的Java API(JSON-P)1.1十分流行,它们共同构 ...

  7. 认识适配器:JSON绑定概述系列

    适配器通过实现JsonbAdapter接口来配置自定义对象的创建和序列化. 方法AdaptToJson()和AdaptFromJson()被执行序列化和反序列化操作的逻辑覆盖. 下一篇文章介绍了使用自 ...

  8. 【JSON】JSON入门详解(二)

    文章目录 JSON基础文章荐读 JavaScript创建JSON对象 JSON与XML的那些事 JSON与XML的相同之处 JSON与XML的不同之处 AJAX相关JSON与XML JSON与XML的 ...

  9. es只能用于json_什么是json和json用于什么

    es只能用于json When you do a search for JSON, you get highly technical answers online. In this article, ...

最新文章

  1. python整数类型进制表示_Python二进制、八进制、十六进制数字的表示和转换
  2. python之函数名称空间,作用域,嵌套函数
  3. unsigned a:1;
  4. 你应该学习的 20 个 Python 代码段
  5. linux 企业邮件服务器_什么是Linux服务器,为什么您的企业需要一个?
  6. java对象添加字段_99.9%的Java程序员都说不清的问题:JVM中的对象内存布局?
  7. ITIL配置管理流程设计
  8. 分享typecho博客的Next主题包
  9. 解决安装软件时出现的error1723,以安装破解版Endnote X9为例(附资源)
  10. 英尺、英寸、厘米的转化:C语言
  11. Keras nlp入门 imdb电影评论分类
  12. 矩阵变换应用-分块矩阵
  13. Java基础之MySQL数据库与JDBC
  14. 电脑上的软件卸载不了怎么办
  15. 计算机二级offic表格公式,计算机二级OfficeEexcel公式汇总.docx
  16. WPF:鼠标拖曳、拖动控件
  17. 计算机学数字模拟电路,数字模拟转换
  18. 统计字符串中每个字符的个数。(原始字符串是:“aabccdeefff”,结果是:a2 b1 c2 d1 e2 f3)
  19. leetcode 60. 排列序列(困难、计数法)
  20. 回深圳后三次面试总结

热门文章

  1. 牛客网【每日一题】5月18日 「土」秘法地震
  2. 学习三分 (概念 + 模板 + 例题:曲线)
  3. CF1100F Ivan and Burgers(线性基)
  4. 洛谷P2497:基站建设(splay、斜率优化)
  5. P2579,jzoj2288-[ZJOI2005]沼泽鳄鱼【矩阵乘法】
  6. 【做题记录】[NOI2008] 假面舞会—有向图上的环与最长链
  7. 【树链剖分】旅游(luogu 3976)
  8. 2、安装和连接mysql
  9. Java面试常问计算机网络问题
  10. Vue.js2.0开发环境搭建(三)