我在网上找不到问题的答案(也许我搜索得不够好,因为我仍然是新手)。
谁能告诉我Jackson和Gson是否实现了标准的JSR 353:Java™ API for JSON Processing。我想使用标准代码编写。
这个链接有回复(显然是杰克逊创始人的),它本质上是说杰克逊没有实现JSR:
回复 Tatu Saloranta 在 一月 26, 2014 在 8:21下午
我不是JSR-353的忠实粉丝(我认为这是一个很大的失败),除非发生激烈的事情,否则杰克逊核心不会实现JSR-353。使用数据绑定没有任何好处;既是因为实现不会带来任何东西(没有一个是特别快的),也不是实现 Databind 需要的所有内容(base64 编码、多格式支持功能)——最糟糕的是,所有现有的(反)序列化程序都需要使用新的、功能较差的 API 重写。而Jackson的基线需要成为Java 8。所以我看不到任何好处。
然而,反过来是可能的;有可能有一个基于 Jackson 流包的 JSR-353 实现,这已经完成了:
https://github.com/pgelinas/jackson-javax-json。
或者,为了使 Jackson 能够读取/写入 JSR-353 JSON 对象类型,需要一个简单的数据类型模块。我前段时间写了一个:
https://github.com/FasterXML/jackson-datatype-jsr353
因此,如果Java开发人员最终遵循"标准"轨道,Jackson可以一起玩。
谷歌没有(不能?)对JSR进行投票,我在Gson的路线图上也找不到任何表明他们想要遵守的内容。
tl;dr
用:
- JSON-P
- JSON-B
更新
另外两个答案是正确的,但已经过时了。正如他们所解释的,杰克逊并不直接实现任何JSR。
然而:
- 有一个项目提供了一个数据类型模块来帮助 Jackson 与 JSR 353 更兼容:jackson-datatype-jsr353。
- JSR 353 被 JSR 374:Java™ API for JSON Processing 1.1 取代。
- JCP继续致力于JSON支持,用于JSON的处理以及绑定产生一对JSR:374 JSON-P和367 JSON-B。
- JSR 374定义了JSON处理(JSON-P)。
- 请参阅 JSON-P 的项目页面。
- 参考实现可以在 Glassfish 中找到,这是 Jakarta EE(以前称为 Java EE)的参考实现。
- JSR 367 提供了绑定功能 (JSON-B)。
- 请参阅 JSON-B 的项目页面。
- Yasson 是参考实现。
因此,您现在确实可以使用 Jackson 以外的 JSON 库编写标准代码。
不,既没有原生实现这个 API,也没有计划(我知道)来实现它。就JCP标准而言,这是DOA;它提供的很少(愚蠢的流 API,根本没有数据绑定),除了为实现的 JSR 集添加兼容性复选框之外,任何人都没有动力实现它。
https://github.com/pgelinas/jackson-javax-json/有一个基于 Jackson 的 JSR-353 实现,但是,如果您真的认为将代码基于此 API 是个好主意。