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

linux新闻评论667 views阅读模式

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

  • JSON Pointer
  • JSON Patch
  • JSON Merge Patch
  • 查询和转换操作
  • Java 8流以及lambda表达式

在2013年,JSON-P作为Gson和Jackson的替代方案,被引入到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的其它更多信息请访问如下资源:

  • Dmitry Kornilov和Werner Keil的报告:Java EE 8中对于JSON的支持
  • Dmitry Kornilov的报告:通过JSR决议
  • Jitendra Kotamraju的文章:针对JSON处理的Java API:JSON简介
  • 网站JSR 353:针对JSON处理的Java API:参考实现
  • Oracle的指南:19.3章:使用对象模型API

企鹅博客
  • 本文由 发表于 2019年9月21日 23:53:15
  • 转载请务必保留本文链接:https://www.qieseo.com/299166.html

发表评论