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

标签 json jsonp java-ee-8 jsonb-api yasson

可以通过以下方式将 JsonObject 转换为相应的类实例:
Pojo pojo = JsonbBuilder.create().fromJson(jsonObject.toString(), Pojo.class)
但是,使用 jsonObject.toString() 似乎效率低下。因为 String 是另一个中间表示,它包含相同的信息。我需要在对象绑定(bind)之前转换 jsonObject。那么有没有更有效的方法来实现从 JsonObject 的绑定(bind)?

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

最佳答案

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 在 org.eclipse.yasson.YassonJsonb 上添加了对此的支持。 this PR中的接口(interface).希望此功能将包含在 JSON-B 规范的下一版本中。

关于json - 使用 JSON-B 1.0(例如 Yasson、Java EE 8)有效地将 JsonObject 转换为 pojo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55677292/

相关文章:

javascript - 将值从 JSON 对象推送到数组并使用外部函数

javascript - 我如何将此 AJAX json 结果(具有键/值属性)转换为 javascript 数组

java - 通过 CDI 检索单元测试中的替代实体管理器

javascript - 如果在数组中发现重复项,必须通过纯 javascript 添加带有键的索引

json - 发送后无法设置 header 。 Nodejs/express 与 axios

javascript - 如果使用 JSONP 来绕过同源策略,它不能用于 XSS 攻击吗?

Javascript 从外部站点获取 html

json - 使用 JSONP 技术从 Geonames API 加载国家国旗

java - javax.enterprise.context.RequestScoped 在字段上指定时如何工作?

JavaEE/Servlet/Tomcat 项目仅识别 JSP