Azure Logic App Consumption中按ID聚合求和合并数组项的方法
问题描述
我有一个HTTP动作返回的对象数组,格式如下:
[ { "Id":1, "Good":0, "Average":0, "Bad":1 }, { "Id":2, "Good":1, "Average":0, "Bad":0 }, { "Id":1, "Good":0, "Average":1, "Bad":0 }, { "Id":3, "Good":0, "Average":0, "Bad":1 }, { "Id":1, "Good":0, "Average":1, "Bad":0 } ]
需要不使用内联JavaScript,仅通过Data Operation动作实现按Id合并记录,并对Good、Average、Bad字段的数值求和,最终得到如下结果:
[ { "Id":1, "Good":0, "Average":2, "Bad":1 }, { "Id":2, "Good":1, "Average":0, "Bad":0 }, { "Id":3, "Good":0, "Average":0, "Bad":1 } ]
实现步骤
以低代码平台的Data Operation动作为例,按以下步骤操作:
1. 提取并去重唯一ID列表
- 添加「Select」动作,输入源为HTTP返回的数组,映射规则仅保留
Id字段:@item()?['Id']。 - 添加「Union」动作,将上述Select的输出作为两个输入参数(利用Union特性实现去重),得到所有唯一的
Id数组。
2. 循环处理每个唯一ID
- 添加「Apply to each」动作,输入源为去重后的ID数组。
- 在循环内部依次执行:
a. 筛选当前ID对应的所有记录
添加「Filter array」动作,输入源为HTTP返回的原始数组,筛选条件设为@equals(item()?['Id'], items('Apply_to_each')),得到当前ID的所有匹配记录。b. 对数值字段求和
直接用表达式对筛选后的记录字段求和:Good总和:@sum(body('Filter_array'), 'Good')Average总和:@sum(body('Filter_array'), 'Average')Bad总和:@sum(body('Filter_array'), 'Bad')
c. 构造合并后的对象
添加「Compose」动作,组装成目标格式的对象:{ "Id": @items('Apply_to_each'), "Good": @sum(body('Filter_array'), 'Good'), "Average": @sum(body('Filter_array'), 'Average'), "Bad": @sum(body('Filter_array'), 'Bad') }
3. 输出最终结果
循环结束后,「Apply to each」的输出即为按ID合并并完成求和的对象数组。
内容的提问来源于stack exchange,提问作者Mateech
相关产品推荐
相关产品推荐

