首页 > 解决方案 > 使用 JSON-B 1.0(例如 Yasson、Java EE 8)有效地将 JsonObject 转换为 pojo

问题描述

一个 JsonObject 可以通过以下方式转换成它对应的类实例:

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

但是,使用 String 似乎是低效的,它jsonObject.toString()是包含相同信息的其他中间表示。我需要在对象绑定之前转换 jsonObject。那么有没有更有效的方法来实现从 JsonObject 的绑定?

(注意我想用 Java EE 8 标准来实现,所以 Gson 和 Jackson 不是一个选项,但可能是它的概念)。Yasson小组中目前没有答案,所以希望有人能找到这个。Michael Schnell 还提出了JsonStructure绑定,但目前还没有解决方案。

标签: jsonjsonpjava-ee-8jsonb-apiyasson

解决方案


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

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

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

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


推荐阅读