leftso 821 0 2018-04-12 07:10:00 编程技术 java java ee 8

logo-cover-Java EE 8 JSON Pointer讲解
Java EE 8包含JSON处理API的更新,并为最新的JSON标准提供最新的IEFT标准。他们是:
  • JSON Pointer (RFC 6901)
  • JSON Patch (RFC 6902)
  • JSON Merge Patch (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-Pointer

JSON指针定义了一个字符串表达式,该表达式引用JSON文档的层次结构内的元素。通过JSON指针表达式,您可以通过检索,添加,删除和替换由表达式引用的元素或值来访问和操作JSON文档。

入口API是javax.json.JsonPointer接口。通过调用javax.json.Json  类上的静态工厂方法createPointer(String expression)并将其传递给指针表达式来创建实例。

检索一个值

如果下面给出了JSON文档,并且您想要检索title元素的值,则可以创建JSON指针表达式  /title

{
"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 ...;
下面的代码片段创建一个JsonPointer 并引用title 元素。然后它调用传递JsonObject来查询的getValue()方法。
JsonValue jsonValue = Json.createPointer(“/ title”)。getValue(jsonObject);

添加一个值

要向JSON文档添加(或插入)值,请遵循与检索相同的逻辑,方法是使用JSON指针表达式来标识文档中的插入点。以下代码片段将新的“category”:“Programming JSON对象添加到文档的根目录。

JsonObject jsonObject = Json
      .createPointer("/category")
      .add(jsonObject, Json.createValue("Programming"));

返回的JsonObject 是整个新的修改对象。

删除一个值

删除过程需要将删除的值的位置表示为JSON指针表达式。下面的代码片段删除title 元素,并将修改的JSON文档作为JsonStructure 实例返回

JsonStructure jsonStructure = Json.createPointer(“/ title”)。remove(jsonObject);

替换一个值

要替换要替换的元素的JSON指针表达式,并将替换元素传递给replace()方法。下面的代码片段替换title 元素的值并返回修改后的JSON文档。

JsonStructure jsonStructure = Json
     .createPointer("/title")
     .replace(jsonObject, Json.createValue("Java EE 8"));

测试一个值

可以使用containsValue() 方法测试某个位置存在的值。下面的代码片段测试以查看它在由JSON指针表达式/ doesNotExist表示的位置处有一个值。

Boolean containsValue = Json
     .createPointer("/doesNotExist")
     .containsValue(jsonObject);

总结结

上面这些,这就是关于JSON Processing新功能的第一篇文章。