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



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

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

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

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

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

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

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

更新(2019 年 6 月(:虽然仍然没有JSON-B标准方法可以做到这一点,但JSON-B参考实现Eclipse Yasson在此PR的org.eclipse.yasson.YassonJsonb接口上添加了对此的支持。

相关内容

最新更新