在Logic Apps中基于ID匹配合并数组元素的技术方案问询
在Azure Logic Apps中匹配数组ID并添加对应字段的解决方案
需求说明
基于**Machines数组的id与Vulnerabilities数组的machineId**的匹配关系,将对应机器的computerDnsName字段添加到漏洞条目里,而非单纯合并两个数组。
核心实现表达式
在Logic Apps的「Compose」动作中使用以下表达式(假设两个数组已存储在同名变量中):
@select( variables('Vulnerabilities'), union( item(), createObject( 'computerDnsName', first( where( variables('Machines'), equals(item()?['machineId'], item()?['id']) ) )?['computerDnsName'] ) ) )
表达式拆解
select(variables('Vulnerabilities'), ...):遍历Vulnerabilities数组的每一条漏洞记录union(item(), ...):将原漏洞条目与新生成的computerDnsName字段合并,保留原所有字段createObject('computerDnsName', ...):创建仅包含目标字段的临时对象first(where(variables('Machines'), equals(item()?['machineId'], item()?['id'])))?['computerDnsName']:- 在Machines数组中筛选出
id与当前漏洞项machineId匹配的条目 - 取第一个匹配结果(若存在多匹配可调整逻辑)
- 通过
?运算符处理无匹配的情况,避免空值报错
- 在Machines数组中筛选出
示例输出
匹配后的Vulnerabilities条目将包含新增的computerDnsName字段:
{ "id": "5afa3afc92a7c63d4b70129e0a6f33f63a427e21-_-CVE-2020-6494-_-microsoft-_-edge_chromium-based-_-81.0.416.77-_-", "cveId": "CVE-2020-6494", "machineId": "5afa3afc92a7c63d4b70129e0a6f33f63a427e21", "fixingKbId": null, "productName": "edge_chromium-based", "productVendor": "microsoft", "productVersion": "81.0.416.77", "severity": "Low", "computerDnsName": "mymachine1.contoso.com" }
注意事项
- 确保Machines和Vulnerabilities数组已正确加载(可通过「Initialize variable」动作提前存储)
- 若存在一个
machineId对应多个Machines条目的场景,可替换first()为其他逻辑(如take()或自定义筛选) ?空值运算符用于兼容无匹配项的情况,避免逻辑应用因空引用失败
内容的提问来源于stack exchange,提问作者LJsec
相关产品推荐
相关产品推荐

