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

Java EE 8包括对JSON处理API的更新,并使其与JSON的最新IEFT标准保持同步。 他们是:

我将在这个迷你系列中涵盖这些主题。

入门

要开始使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值