JSON-P 1.1 现已发布公开预览版

  • Michael Redlich
  • 罗远航

2017 年 3 月 14 日

话题:JavaDevOps语言 & 开发架构

JSR 374(JSON-P 1.1 版本)的公开预览版现在已经开放,JSON-P 是一个针对处理 JSON 的 Java API。这个版本有望和 JSON 绑定库(JSON-B)的 Java API 一同被添加到 Java EE 8 的发布版本中,并且它还保持了 JSON-P 当前所支持的 JSON IETF标准。它提供了如下支持:

在 2013 年,JSON-P 作为GsonJackson的替代方案,被引入到 J2EE 7 的发布版本中。它被设计用于解析、生成和查询标准的 JSON 文档。

JSR-367是 JSON 绑定库的 Java API,它也被纳入了 Java EE 8 的发布版本中。JSON-B 被设计用来将 JSON 与 Java 中的对象绑定起来。InfoQ 对之前 JSON-B 公开预览版的发布也有过报道

入门指南

我们先从 JSON-P 的解析器(Parser)和指针(Pointer)的一个例子开始入门,考虑如下的 JSON 文档:

[
    {
    "publication":"New Vaadin Spring Release Introduces Enhanced View Management",
    "publicationDate":"2016-12-30 00:00:00",
    "author":"Michael Redlich",
    "publicationType":"Article",
    "publisher":"C4Media"
    },
    {
    "publication":"Pivotal Releases First Milestone of Next-Generation Spring Data Featuring Reactive Database Access",
    "publicationDate":"2017-01-19 00:00:00",
    "author":"Michael Redlich",
    "publicationType":"Article",
    "publisher":"C4Media"
    },
    {
    "publication":"Netflix Introduces Hollow, a Java Library for Processing In-Memory Datasets",
    "publicationDate":"2017-01-31 00:00:00",
    "author":"Michael Redlich",
    "publicationType":"Article",
    "publisher":"C4Media"
    }
]

这个 JSON 文档可以使用JsonParser进行解析:

InputStream fis = new FileInputStream(JSON_FILE);
JsonParser parser = Json.createParser(fis);
while(parser.hasNext()) {
    JsonParser.Event event = parser.next();
    switch(event) {
        case START_ARRAY:
        case END_ARRAY:
        case START_OBJECT:
        case END_OBJECT:
        case VALUE_FALSE:
        case VALUE_NULL:
        case VALUE_TRUE:
            System.out.println(event.toString());
            break;
        case KEY_NAME:
            System.out.print(event.toString() + " " + parser.getString() + " - ");
            break;
        case VALUE_STRING:
        case VALUE_NUMBER:
        System.out.println(event.toString() + " " + parser.getString());
            break;
        }
    }
fis.close();

通过使用JsonPointer,我们能够找到 JSON 文档中的特定元素:

InputStream fis = new FileInputStream(JSON_FILE);
JsonReader jsonReader = Json.createReader(fis);
JsonArray jsonArray = jsonReader.readArray();
JsonPointer pointer = Json.createPointer("/1/publication");
JsonValue publication = pointer.getValue(jsonArray);
System.out.println(i + ": " + publication);
fis.close();

这个例子中找到并且显示出了上述 JSON 文档中的第二个 publication。我们在GitHub上准备了一个完备的实例程序,其中包括 JSON-P、Gson 以及 Jackson。

最新的 JSON-P 1.1规格书能够在JSR-374 网站下载到。

大名鼎鼎的 Java EE 传播者Reza Rahman最近发布了一篇博客,他在其中阐述了 JSON 在 Java EE 8 中起到的作用:

这两个 API 对于加强 JSON 在 Java 中的地位至关重要,就像 JAXP(处理 XML 的 Java API)和 JAXB(XML 绑定库的 Java API)在许多年前所起的作用一样。通过这两个 API,Java 开发者可以简单地将 JSON 视为另一种 Java 序列化格式。不需要过多的第三方库和配置了:JSON 处理变得极其简单。在我看来,这些 API 非常关键,它们应该被纳入一个模块化的 Java SE 版本中,就像是 JAXB 和 JAXP 已经成为了 Java SE 中的一部分一样。

JSON-P 和 JSON-B 的最终版本有望在 2017 年 4 月发布。

其它资源

关于 JSON-P 的其它更多信息请访问如下资源:

查看英文原文:Public Review of JSON-P Specification 1.1 is Now Open


感谢薛命灯对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

JavaDevOps语言 & 开发架构