如何在Power Automate中无需Apply to Each合并FilterArray结果?
问题背景
在Power Automate的Apply To Each流程中,针对不同时间多次调用外部API,依次完成SOAP标签移除、XML转JSON、解析过滤后,得到FilterJSON-IncludeUser的结果(结构为带body数组的JSON或空值)。目前通过Apply to each 3循环调用Append to array variable将结果追加到jointJson数组,存在两个问题:
- 流程耗时过长
- 每日调用次数超出48000次的阈值
需求:无需循环和Append to array variable,直接合并所有FilterJSON-IncludeUser的结果。
解决方案
利用Power Automate的集合操作表达式或Select动作,批量提取并合并所有结果中的body数组,替代逐次追加的循环逻辑。
具体步骤
提取所有有效
body数组
新增一个Select动作,数据源选择Apply To Each的输出(即所有FilterJSON-IncludeUser的结果集合)。
在映射字段中使用表达式处理空值,确保空结果不会破坏合并:if(empty(item()?['body']), json('[]'), item()?['body'])该表达式作用:若当前结果的
body为空,返回空数组;否则返回原body数组。扁平化合并数组
使用flatten表达式将Select输出的数组集合合并为单个一维数组,直接赋值给jointJson变量:flatten(body('Select'))若你的Power Automate版本不支持
flatten,可使用替代表达式:json(concat('[', join(body('Select'), ','), ']'))
效果说明
- 彻底消除循环追加的动作调用,将多次
Append to array variable的调用次数压缩为1次(或直接用表达式赋值无额外调用),避免触发每日调用阈值。 - 批量处理比循环逐次追加的效率提升明显,大幅缩短流程耗时。
示例验证
假设Apply To Each输出两个FilterJSON-IncludeUser结果:
{"body":[{"@Id":"19267384","@AgentId":"11**",...}]}
{"body":[{"@Id":"19267387","@AgentId":"11657",...}]}
经过Select和flatten处理后,jointJson将直接得到合并后的数组:
[{"@Id":"19267384","@AgentId":"11**",...},{"@Id":"19267387","@AgentId":"11657",...}]
内容的提问来源于stack exchange,提问作者microsoftdeveloperdesigner

