了解JSON-P 1.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指针表达式,您可以通过检索,添加,移除和替换表达式引用的元素或值来访问和操作JSON文档。

条目API是javax.json.jsonPointer接口。通过调用静态工厂方法创建实例createPointer(字符串表达式)在。。。上javax.json.json类,并将指针表达式传递给它。

检索值

如果您有下面的JSON文档,并且希望检索标题元素,创建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 ...;


下面的代码段创建一个JsonPointer并引用标题元素。然后调用getValue()方法,该方法传递给JSONObject去询问。

JsonValue jsonValue = Json.createPointer("/title").getValue(jsonObject);


添加值

要向JSON文档添加(或插入)值,请遵循与检索相同的逻辑,使用JSON指针表达式标识文档中的插入点。下面的代码段添加了一个新的“类别”:“方案编制”JSON对象指向文档的根。

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


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

移除值

移除过程要求移除的值的位置表示为JSON指针表达式。下面的代码段删除了标题元素,并将修改后的JSON文档作为JSONStructure实例

JsonStructure jsonStructure = Json.createPointer("/title").remove(jsonObject);


替换值

若要替换值,请使用要替换的元素的JSON指针表达式。然后,将替换元素传递给替换()方法。下面的代码段替换了标题元素的值,并返回修改后的JSON文档。

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


测试值

可以使用containsValue()方法。下面的代码片段测试JSON指针表达式所表达的位置是否存在值/DoesNotexist

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


相关文章

Top 5 new features in Java EE 8
Java EE 8: Only What’s New – First Look
Jakarta EE: 5 Things You Need to Know
Java EE 8: Only What’s New
Java EE 8 Security API Overview