freemarker - 从 json 数组中找出具有唯一 id 的特定元素
问题描述
我有 json 数组并想根据下面示例中提到的人员 ID 对周进行分组。我尝试了代码但无法获得它,因为我是自由标记代码的新手。JSON数组如下:-
[{"Hours":"5.500","Status":"Draft","Week":"17","person_name":"Raj","person_id":"1414"}, {"Hours":"0.500 ","状态":"草稿","周":"17","person_name":"Raj","person_id":"1414"}, {"小时":"24.500","状态":"草稿","周":"14","person_name":"Mukesh","person_id":"1046"}, {"小时":"7.500","状态":"草稿","周":"15 ","person_name":"Mukesh","person_id":"1046"}, {"Hours":"3.000","Status":"Draft","Week":"16","person_name":"Mukesh","person_id":"1046"}]
可以请帮助我。id {1046:[14,15,16], 1414:[17,17]} 以下格式的输出
解决方案
这种重组不应该在模板内完成。虽然 FTL 可以将类似地图的值和类似列表的值相加,但将它与它一起破解会非常低效(它仅适用于非常简单的任务)。在将数据传递给模板之前,条目应该已经分组。
如果您必须从模板启动此操作,那么您将需要一个实用 Java 对象,该对象具有执行此分组的方法或TemplateMethodModelEx
执行此操作的实现。然后从模板中调用该实用程序对象(如utils.groupByPersonId(foo)
或groupByPersonId(foo)
)。这样的实用程序对象可以通过多种方式暴露给模板:作为数据模型的一部分,通过freemarker.tempalte.Configuration
对象全局作为“共享变量”,或者通过确保实用程序TemplateMethodModelEx
(或任何其他TemplateModel
)类对 Java 可见,然后执行类似于<#assign groupByPersonId = 'com.example.GroupByPersonIdMethod'?new()>
模板中的东西。
推荐阅读
- java - 如何在 Redis 和 MongoDB 之间同步操作
- r - 识别每一行的字符并在列中返回它们
- list - 使用 Python 连接列表
- angular - Angular 未使用 Dev Extreme 数据网格列和视图进行更新
- java - 多线程终止线程并允许访问其他线程
- css - 如何在 Bootstrap Vue 中更改箭头颜色?
- sql - Postgtres:考虑小时/分钟计算浮动天数
- r - 语法 %||% 的含义是什么?
- c++ - 抑制 LeakSanitizer 输出
- android - 检测已卸载的应用程序:如何向许多设备发送 Fcm 请求以了解其中一个已从 Firebase 未注册?