杰克逊和Gson是否直接实现标准JSR-353?

13

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

请问是否有人可以告诉我 JacksonGson 是否实现了标准的JSR 353: Java™ API for JSON Processing。我想使用标准代码进行编写。


353还是535?如果你在谈论javax.json(即JSR 353),那么答案是否定的,不能直接这样使用。 - fge
是的,你能告诉我如何使用Jackson来完成这个吗? - maher.belkh
类似的问题:有哪些实现JSR-353(JSON)的API - Basil Bourque
在姊妹网站软件推荐Stack Exchange上,请参见:JSR-353(JSON)的实际实现? - Basil Bourque 2018年5月28日22:30 - Basil Bourque
3个回答

9

简介

概述:

更新

其他两个答案都是正确的,但已经过时。正如它们所解释的那样,Jackson并没有直接实现任何JSR。

然而:

因此,您现在可以使用除Jackson之外的标准代码编写JSON库。


9

这个链接有回复(显然是由Jackson的创始人发表的),它基本上表示Jackson没有实现JSR:

2014年1月26日晚上8:21,Tatu Saloranta发表了回复。

我不是JSR-353的忠实粉丝(我认为它是一个巨大的失败),除非发生了重大变化,否则Jackson核心将不会实现JSR-353。使用数据绑定没有任何好处;因为实现没有带来任何东西(没有特别快的实现),也没有实现所有数据绑定所需的功能(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就可以一起玩耍。

Google没有在JSR上投票, 而我也找不到Gson的路线图上的任何信息表明他们想要遵守。


这个能用 https://github.com/pgelinas/jackson-javax-json 来实现吗?我没有完全理解,无法决定是否应该朝这个方向发展。另外,请问是否有一个实现标准 jsr-353 的 JSON API(例如 jackson、gson 等)? - maher.belkh
@maher.belkh Genson原生支持JSR 353,同时还包含其他JSR之外的功能。 - eugen
1
http://jackson-users.ning.com/forum/topics/future-of-jackson-java-8-jsr-353 现在是一个失效链接 - user979222
1
@NicolasLacombe,我刚刚更新了Wayback Machine的链接。 - Sergey Vyacheslavovich Brunov

6
不,它们都没有原生地实现此API,也没有计划(据我所知)去实现它。就JCP标准而言,这是DOA;它提供了非常少的东西(简化的流API,根本没有数据绑定),并且很少有人有动力去实现它,除非是为了添加一组JSR实现的兼容性复选框。
然而,在https://github.com/pgelinas/jackson-javax-json/上有一个基于Jackson的JSR-353实现可用,如果你真的认为在这个API上构建你的代码是个好主意的话。

这个答案现在已经过时了。JSR 353 定义了 JSON 解析的基础。JSR 367 在此基础上提供了绑定能力。请参阅 JSR 367 项目页面Yasson 是参考实现。 - Basil Bourque
2
不,JSR-353和JSR-367都没有被框架广泛使用,尽管一些框架正在添加替代绑定来使用它们。这些规范和实现与Gson或Jackson的成熟度或功能水平不接近(也不可能),唯一的卖点是坚持“但它是标准”。当然,用户可以自由选择使用任何他们想要的东西,但我觉得盲目地喝Oracle Kool-Aid是不好的。 - StaxMan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接