JSON指针挑战
给定下面代码片段中的JSON文档,使用JSON-P 1.1中的JSON指针功能会得到什么结果?
JSON对象的新形状如下:
{
"name": "Duke",
"likes": [
"Java EE 8",
"Java",
"Ice Cream"
]
}
什么是JSON指针?
JSON Pointer是JSON Processing 1.1 API中的一项新功能,并将其与最新的IEFT标准JSON Pointer结合 在一起 。 此更新的API构成Java EE 8版本的一部分。
那么,什么是JSON指针?JSON指针定义了一个字符串表达式,该字符串表达式标识JSON文档中的特定值。 它类似于XPointer ,它用于标识XML文档中的片段。
让我们看一个例子。 给定以下JSON文档,将通过JSON指针表达式/ likes / 0来引用likes数组中的第一个元素。
{
"name": "Duke",
"likes": [
"Java",
"Coffee"
]
}
这是指元素值: Java 。
如何使用JSON指针?
入口API是JsonPointer接口。 通过在Json类上调用静态工厂方法createPointer()创建一个实例。 下面的代码片段创建了一个JsonPointer并引用了likes数组中的第二个元素:
JsonPointer pointer = Json.createPointer("/likes/0");
JsonPointer API还可以通过添加,替换和删除属性来变异JSON文档。 下面的代码段将值“ Java EE 8”添加到喜欢列表:
pointer.add(jsonObject, Json.createValue("Java EE 8"));
并且以下代码段中的代码替换了第三个索引位置的值:
pointer = Json.createPointer("/likes/2");
JsonObject newJsonObject = pointer.replace(jsonObject, Json.createValue("Ice Cream"));
将所有内容放在一起,您将获得代码,这些代码添加了likes数组的元素,并替换了元素。 完整的代码片段如下所示:
JsonObject jsonObject =
Json.createReader(new StringReader(target)).readObject();
JsonPointer pointer = Json.createPointer("/likes/0");
jsonObject = pointer.add(jsonObject, Json.createValue("Java EE 8"));
pointer = Json.createPointer("/likes/2");
JsonObject newJsonObject =
pointer.replace(jsonObject, Json.createValue("Ice Cream"));
此代码的输出是:
{
"name": "Duke",
"likes": [
"Java EE 8",
"Java",
"Ice Cream"
]
}
进一步阅读
有关如何使用JSON处理的新功能的更多信息,请在IBM developerWorks上查看我的文章 Java EE 8的新增功能,并且您还应该阅读JSON处理1.1的Java API规范( JSR 374 )。
GitHub储存库
可以在我的GitHub存储库中找到此代码以及所有其他#100DaysOfJavaEE8的代码。
原始推文
新的#100DaysOfJavaEE8挑战! 给定JSON,应用JSON-P 1.1中的Pointer功能会得到什么结果? #JavaEE8 #Java @Java_EE pic.twitter.com/2crmLu5wmK
-Alex Theedom(@alextheedom) 2017年10月8日
翻译自: https://www.javacodegeeks.com/2017/10/json-processing-1-1-100daysofjavaee8.html