首页 > 解决方案 > 从 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]} 以下格式的输出

标签: freemarker

解决方案


这种重组不应该在模板内完成。虽然 FTL 可以将类似地图的值和类似列表的值相加,但将它与它一起破解会非常低效(它仅适用于非常简单的任务)。在将数据传递给模板之前,条目应该已经分组。

如果您必须从模板启动此操作,那么您将需要一个实用 Java 对象,该对象具有执行此分组的方法或TemplateMethodModelEx执行此操作的实现。然后从模板中调用该实用程序对象(如utils.groupByPersonId(foo)groupByPersonId(foo))。这样的实用程序对象可以通过多种方式暴露给模板:作为数据模型的一部分,通过freemarker.tempalte.Configuration对象全局作为“共享变量”,或者通过确保实用程序TemplateMethodModelEx(或任何其他TemplateModel)类对 Java 可见,然后执行类似于<#assign groupByPersonId = 'com.example.GroupByPersonIdMethod'?new()>模板中的东西。


推荐阅读