BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Michael Redlich 关注 15 他的粉丝 ,译者 罗远航 关注 1 他的粉丝 发布于 2017年3月15日. 估计阅读时间: 9 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

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)关注我们。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT