写点什么

处理 JSON 的 Java API 标准发布

  • 2013-05-06
  • 本文字数:2087 字

    阅读完需:约 7 分钟

作为 JSON 处理(JSON-P)的 Java API,JSR-353 已经到达了最终的批准投票阶段。JSON-P(类似于 JAXP)由一个流 API(类似于 StAX)和一个对象模型 API(类似于 DOM)组成。它的参考实现是 jsonp ,目前正处在测试阶段,它基于 CDDL v1.1 和 GPL v2 协议开放源码。JSON-P 将作为即将发布的 Java EE 7 的一部分,同时 JAX-RS 会使用它作为默认的 JSON 实现。请注意,该 API 并没有包含 JSON 数据绑定(类似于 JAXB),同时它和更流行的 JSONP(JSON with padding)并没有关系。

JSON(JavaScript 对象标记)是一个轻量级数据交换格式,被广泛用于 Web 应用程序、REST 服务和 NoSQL 数据库。随着 JSON 的流行以及 Java 平台上诸多 JSON 类库(org.json、Jackson 及 google-gson 等)的出现,现在已经到了需要对开发者创建并使用 JSON 的方式进行标准化的阶段。JSON-P 就是即将到来的标准,它能够被独立地使用,或者作为 Java EE 7 容器的一部分。

JSON-P 分为两个 API,流 API(javax.json.stream)和对象模型 API(javax.json)。流 API 是一种底层且高效的解析和生成 JSON 的方式。它由两个主要的抽象构成——JsonParser 和 JsonGenerator。JsonParser 是一个拉模式解析器,允许以向前、只读的方式访问 JSON 输入源。JsonGenerator 则提供了向流中写入 JSON 的方法,并且允许使用方法链。Generator 输出 JSON 对象中的名 / 值对以及 JSON 数组中的值。

下面是 JsonParser 和 JsonGenerator 的代码示例。首先是我们将会读取或者创建的 JSON 数据。

复制代码
[
{
"type" : "home",
"number" : "(800) 111-1111"
},
{
"type" : "cell",
"number" : "(800) 222-2222"
}
]

下面是 JsonParser 示例,示例的底部是它的输出。

复制代码
JsonParserFactory factory = Json.createParserFactory(null);
JsonParser parser = factory.createParser(new StringReader(json));
while (parser.hasNext()) {
Event event = parser.next();
switch (event) {
case KEY_NAME: {
System.out.print(parser.getString() + "="); break;
}
case VALUE_STRING: {
System.out.println(parser.getString()); break;
}
}
}
type=home
number=(800) 111-1111
type=cell
number=(800) 222-2222

下面是 JsonGenerator 的示例,它向 System.out 中打印 JSON。

复制代码
JsonGeneratorFactory factory = Json.createGeneratorFactory(null);
JsonGenerator generator = factory.createGenerator(System.out);
generator.writeStartArray().
writeStartObject().
write("type", "home").
write("number", "(800) 111-1111").writeEnd().
writeStartObject().
write("type", "cell").
write("number", "(800) 222-2222").writeEnd().
writeEnd().close();

第二部分是对象模型 API,一个简单易用的高层 API,它基于流 API 实现。它创建了一个类似于树的结构代表内存中的 JSON 数据,能够非常容易地进行操纵和查询。对象模型 API 中最主要的抽象是 JsonObject 和 JsonArray,这两部分都是不可变的。JsonObject 提供了一个 Map 视图,用于访问模型中未被排序的名 / 值对集合。JsonArray 提供了一个列表视图访问排序的值序列。为了创建这些对象模型,你可以使用构建者模式(JsonObjectBuilder 和 JsonArrayBuilder)或者使用 JsonReader 从一个输入源(InputStream 或者 Reader)中读取它们。然后你可以使用 JsonWriter 将这些对象模型写入一个输出源(OutputStream 或者 Writer)。

下面是使用 JsonArrayBuilder 创建 JsonArray 的示例。需要再次提醒的是,我们使用的依然是上面的 JSON 数据。

复制代码
JsonBuilderFactory factory = Json.createBuilderFactory(null);
JsonArray jsonArray = factory.createArrayBuilder()
.add(factory.createObjectBuilder().
add("type", "home").
add("number", "(800) 111-1111"))
.add(factory.createObjectBuilder().
add("type", "cell").
add("number", "(800) 222-2222")).build();

下面是 JSONReader 示例。

复制代码
try (JsonReader jsonReader = Json.createReader(new StringReader(json))) {
JsonArray array = jsonReader.readArray();
System.out.println(array);
}

下面是 JsonWriter 示例。

复制代码
try (JsonWriter jsonWriter = Json.createWriter(System.out)) {
jsonWriter.writeArray(jsonArray);
}

如果你想尝试这个测试版本,那么可以下载jsonp ,或者使用 javax.json:javax.json-api:1.0-b06 和 _org.glassfish:javax.json:1.0-b06_ Maven 产品。你需要使用 Java SE 6 或者更高版本。如果想要获取更多信息,可以访问官方网站提供的 JSON 处理的 Java API ,或者阅读 JSON 处理的 Javadocs 。你还可以通过 YouTube 观看 JavaOne 提供的 JSON 处理的 Java API 呈现

『号外』:JavaOne 2013 大会将于 7 月 22–25 日在上海世博中心举行,内容涵盖使用 Java SE 构建现代应用程序、打造针对下一代智能设备的移动和嵌入式 Java 应用程序、编制基于 Java EE 的复杂企业解决方案以及在云环境中安全、无缝地构建和部署业务应用程序等,报名或查看详情请点击

查看英文原文 Standard Java API for JSON

2013-05-06 06:218403
用户头像

发布了 321 篇内容, 共 118.8 次阅读, 收获喜欢 19 次。

关注

评论

发布
暂无评论
发现更多内容

阿里面试官:HashMap 为什么是线程不安全的?

Java 程序员 后端

靠谱,这是我见过最好的编程指南了!赶快收藏吧,错过大学就白上了!

Java 程序员 后端

道与术丨华为云数据库战略启示录

华为云开发者联盟

数据库 opengauss 华为云 GaussDB 战略

面向对象知识点整理

Java 程序员 后端

面试中常见的问题总结

Java 程序员 后端

面试太难?技术面考察太底层?二面被拒到收割阿里架构offer,复盘成功经历分享!

Java 程序员 后端

教你如何用Keras搭建分类神经网络

华为云开发者联盟

神经网络 keras 分类神经网络 MNIST 数字图像

面试官一口气问了MySQL事务、锁和MVCC,

Java 程序员 后端

面试官问我什么是扩展自适应机制

Java 程序员 后端

Flink CDC 实时数据同步详细解析

五分钟学大数据

flink 11月日更

面向对象-抽象性思想(知识整理)

Java 程序员 后端

面试前夕,你一定要先来看看阿里和京东都问些啥!(阿里+京东Java岗面试题概要

Java 程序员 后端

面试官都爱问的Spring源码:Spring与Mybatis高级整合

Java 程序员 后端

面试官:Java-线程池中的线程复用是如何实现的?

Java 程序员 后端

MatrixDB 从 4018 个参赛项目中脱颖而出,荣获 HICOOL 全球创业大赛第三名!

YMatrix 超融合数据库

时序数据库 分布式时序数据库 Hicool

阿里面试官:你好,谈谈对Synchronized的理解?(一

Java 程序员 后端

阿里面试确实严格,面了整整5轮,还好我技高一筹!

Java 程序员 后端

震惊!2022 年秋招 Java 后端开发岗竟然一片红海!算法岗都不香了吗?

Java 程序员 后端

震撼发布!阿里老兵亲手操刀微服务架构实战,整理出140个案例

Java 程序员 后端

面试字节、阿里等大厂后,总结了今年的Java面试必问的微服务面试题(含答案)

Java 程序员 后端

面试官再问分布式事务,求你看完这份至尊级分布式笔记,给年轻的面试官上一课

Java 程序员 后端

面试官:你如何利用-MySQL-Cluster-实现整体高可用?

Java 程序员 后端

面试官:如何提升TCP三次握手的性能?(1)

Java 程序员 后端

面试官求你别再问我hook了

CRMEB

面试官最喜欢问的Spring Boot知识点整理【附解答】(下)

Java 程序员 后端

阿里蚂蚁金服超全126道面试题,都会的话,你也能去面阿里了

Java 程序员 后端

阿里面试官整理出面试必问:java面试核心知识原理+框架笔记

Java 程序员 后端

阿里面试官:就说最后一遍,有关Spring这13点我们必问!

Java 程序员 后端

面向对象设计的九大基本原则 (GRASP)

Java 程序员 后端

面试大厂一定离不开的——ThreadLocal,它的实现原理你知道吗

Java 程序员 后端

面试官:多线程环境下,HashMap为什么会出现死循环?

Java 程序员 后端

处理JSON的Java API标准发布_Java_Bienvenido David_InfoQ精选文章