使用 JSON-B 1.0(例如 Yasson、Java EE 8)有效地将 JsonObject 转换为 pojo

Convert JsonObject to pojo efficiently with JSON-B 1.0 (e.g. Yasson, Java EE 8)

可以通过以下方式将 JsonObject 转换为对应的 class 实例:

Pojo pojo = JsonbBuilder.create().fromJson(jsonObject.toString(), Pojo.class)

但是,使用 jsonObject.toString() 似乎效率不高,因为 String 是另一种中间表示形式,包含相同的信息。我需要在对象绑定之前转换 jsonObject。那么是否有更有效的方法来实现从 JsonObject 的绑定?

(注意我想用 Java EE 8 标准来实现,所以 Gson 和 Jackson 不是一个选项,但可能是它的概念)。目前Yasson group so hopefully, someone finds this. Michael Schnell also proposed a JsonStructure绑定中没有答案,但也没有解决方案。

JSON-B 1.0 标准无法转换 JSON-P 对象 <--> POJO。然而,已经有足够多的人要求它,我们肯定会在 JSON-B 的下一版本中考虑它。

同时,转换为字符串或使用自定义适配器是您的最佳选择。

如果您担心 JSON-B 的性能,您可以做的第一件事就是缓存 JSON-B 的性能Jsonb 的实例,即不要在每次需要调用 to/fromJson 时都调用 JsonbBuilder.create(),因为所有注释扫描和 class 解析都在创建 Jsonb实例。

更新(2019 年 6 月): 尽管仍然没有 JSON-B 标准方法来执行此操作,但 JSON-B 参考实现 Eclipse Yasson 在 [=14= 中的 org.eclipse.yasson.YassonJsonb 接口上添加了对此的支持].希望此功能将包含在下一版本的 JSON-B 规范中。