Jackson 和 Gson 是否直接实现了标准 JSR-353



我在网上找不到问题的答案(也许我搜索得不够好,因为我仍然是新手)。

谁能告诉我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 是个好主意。

最新更新