json - 使用 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绑定,但目前还没有解决方案。
解决方案
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 规范的下一版本中。
推荐阅读
- python - 如何检查 lineedit 是否有焦点?
- python - 当在 requirements.txt 中提到它们时,如何通过 --no-build-isolation 安装 pip 包?
- java - 更新安卓模块
- powershell - 从 PowerShell 表单 Jenkins 调用长 NAnt 进程(使用管道)
- flutter - Flutter:在 TextFormField 中同时显示 helpText 和 labelText
- c++ - 如何在 Visual Studio Code 的终端内运行 C++ 代码?
- python - 如何按用户聚合具有会话范围复杂性的数据帧?
- excel - Excel VBA:如何在“@”处用商业写列名
- react-admin - 为什么某些输入组件在选择选项时会执行 GET_MANY 查询?
- c# - ASP.NET核心中的红隼服务器可以在启动时配置空闲超时吗