【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

处理 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:218302
用户头像

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

关注

评论

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

技术实践丨GaussDB(DWS)运维管理功能“升级”的原理和使用

华为云开发者联盟

运维 数据 集群

架构训练营 - 第4周课后作业 - 学习总结

Pudding

5G时代音视频开发王器:WebRTC

华章IT

flutter 音视频 WebRTC React Native

面试大厂被面试官用MyBatis怼到“哑口无言”?这份MyBatis源码笔记助你吊打面试官!

Java架构之路

Java 程序员 架构 面试 编程语言

LAXCUS大数据集群操作系统:一个分布式分时共享E级系统软件(三)

陈泽云

人工智能 大数据 计算机网络 操作系统 网络

GO 类型接口及反射间的转换

superman

Go 语言

考研须知

时间是一个人最好的证明

考研

“一个APP竟然可以适配这么多设备?!”《优酷响应式布局技术全解析》开放下载

破绽

阿里巴巴 阿里云 开发者 优酷 电子书

从分布式到微服务成长手册,助我面试跳槽斩获字节Offer

Java架构追梦

Java 学习 架构 面试 微服务

NET-Core中的配置文件操作

为体验更多

C# .net .net core ASP.NET Core

十七、深入Python异常处理

刘润森

Python

京东智联云MySQL数据库如何保障数据的可靠性?

京东科技开发者

MySQL 数据库

有了容器为什么kubernetes还需要Pod?

架构师修行之路

分布式 微服务 pod kubernete

出炉!华为18A自爆SpringCloud微服务分布式笔记

996小迁

Java 编程 架构 面试 SpringCloud

华为云数据安全中心正式公测,8大核心数据安全能力守护你的数据

华为云开发者联盟

华为 安全 数据

详细分析定制企业应用的价格

Learun

敏捷开发 快速开发 软件架构

websocket 是怎么连接的

程序员与厨子

nginx 网络 HTTP websocket

诸多老牌数据仓库厂商当前,Snowflake如何创近12年最大IPO金额

华为云开发者联盟

数据仓库 数据 存储

云计算简史(上)- 15分钟读完15年

明道云

日常工作问题集锦

hasWhere

华为鲲鹏专家解读:90%代码如何移植到鲲鹏平台

华为云开发者联盟

软件 鲲鹏

分布式系统设计理念这么难学?

架构师修行之路

分布式 微服务

“区块链×多方计算”解决众多难题 将成区块链应用新场景

CECBC

区块链 数据融合

直播预告 | 云时代的数据库客户端——CloudQuery最佳实践

BinTools图尔兹

数据库 sql 安全 工具软件

你听过CatBoost吗?本文教你如何使用CatBoost进行快速梯度提升

计算机与AI

Python 学习 优化

架构师训练营 - 第 4周课后作业(1 期)

Pudding

让AI人才在产业界闪闪发光:百度之星的“神奇滤镜”是怎样炼成的?

脑极体

SpringBoot有多重要?面试用SpringBoot把面试官唬住了要30k都行!

Java架构之路

Java 程序员 架构 面试 编程语言

程序员的美丽假期(并不)

Philips

敏捷开发 快速开发

CloudQuery v1.1.1 修复版本发布

BinTools图尔兹

数据库 sql 安全 工具软件

“区块链技术创新要植根市场”

CECBC

金融科技 信息安全

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