使用 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 规范中。
可以通过以下方式将 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 规范中。