返回

文章详情

JEP 540:简单 JSON API(现已在孵化阶段)

Hacker News2026年7月23日 16:01

摘要 定义一个简单、标准的 API,用于解析和生成 JSON 文档,以便在不需要外部库的情况下进行操作。使许多 JSON 处理任务能够以很少的编码完成。这是一个处于孵化阶段的 API。历史 该 JEP 替代了 2014 年撰写的 JEP 198,轻量级 JSON API。多年来情况发生了变化,因此我们采取了不同的方法。目标 提供 Java 平台中处理符合 RFC 8259 的 JSON 文档的标准手段,仪式感低。保持 API 小巧、简单,易于学习。仅提供严格遵循 RFC 8259 所需的数据类型和操作,以促进机器与机器之间的通信。避免多种解析配置、语法扩展、数据绑定和流式处理等功能。确保能够导航和提取具有已知结构的 JSON 文档中的数据的代码简单且可读。由于 JSON 文档没有模式,此类代码可作为事实上的模式,并且应易于阅读。使得对不熟悉的 JSON 文档的探索变得简单快捷。我们通常以探索的方式与 JSON 文档互动,编写不使用规范的代码,而是尝试针对示例文档进行操作。API 应提供迅速失败并带有明确错误消息的方法,以便快速探索。确保缺失或意外的值能够以韧性方式处理,因为 JSON 文档结构可能会随时间演变。使 JDK 本身能够解析和生成 JSON 文档。非目标 创建一个取代已建立的外部 JSON 库的 API 不是目标。动机 JSON 在现代计算中无处不在。Java 生态系统包含广泛的成熟 JSON 库:Jackson、Gson、Jakarta JSON 处理和绑定、Fastjson 2 等。这些库不仅支持 JSON 文档的解析和生成,还支持扩展的 JSON 语法,例如 JSON5,并包括更高级的特性,例如数据绑定,即以高度自定义的方式将 Java 对象与 JSON 相互转换,以及基于事件的流式处理。然而,我们通常只需要执行一些简单的任务,例如从 JSON 文档中提取一些数据。例如,考虑计算来自美国国家气象局 REST API 响应的一组预测温度的平均值。响应是一个看起来像这样的 JSON 文档:{ ... "properties": { ... "periods": [ { "number": 1, "name": "今天", "startTime": "2026-04-22T06:00:00-04:00", "endTime": "2026-04-22T18:00:00-04:00", "isDaytime": true, "temperature": 54, "temperatureUnit": "华氏度", ... }, { "number": 2, "name": "今晚", "startTime": "2026-04-22T18:00:00-04:00", "endTime": "2026-04-23T06:00:00-04:00", "isDaytime": false, "temperature": 48, "temperatureUnit": "华氏度", ... }, { "number": 3, "name": "星期四", "startTime": "2026-04-23T06:00:00-04:00", "endTime": "2026-04-23T18:00:00-04:00", "isDaytime": true, "temperature": 68, "temperatureUnit": "华氏度", ... }, ... ] } } 计算平均预测温度需要解析文档,导航到结构中包含预测值的位置,并在提取温度数据时迭代预测值数组。我们应该能够用简单的 Java 代码处理这样的简单任务,而无需安装外部库,也不必怀疑其他语言是否能让我们更高效。推动 Java 平台最近演变的一个关键目标是使简单任务更容易以更少的仪式完成。实现这一目标的功能包括集合的方便工厂方法、var 声明、从源文件运行程序,以及紧凑的源文件和实例主方法。一个简单的 JSON API 用于解析和生成 JSON 文档也将服务于这一重要目标。 在 JDK 中使用 JSON Java 平台的标准 JSON API 还将为平台及其自身的进一步使用 JSON 奠定基础,因为 JDK 不能有外部依赖关系。一个潜在的用例是配置文件。JDK 使用属性文件格式用于各种配置文件,如安全属性文件。这种格式的一个弱点是它不能表达结构化数据。要在属性文件中表示数组,必须使用笨拙的变通方法,例如使用顺序编号的属性:security.provider.1=SUN security.provider.2=SunRsaSign security.provider.3=SunEC ... 使用内置于 JDK 中的 JSON,配置文件可以自然地表示数组,使用 JSON 数组:{ "providers": [ "SUN", "SunRsaSign", "SunEC" ], ... } 描述 jdk.incubator.json API 以 JsonValue 接口为中心,该接口表示 JSON 值。JSON 语法有四种原始类型:J

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡