如何使用Azure Logic App修改告警JSON结构中的resourceName字段值
Azure Logic App 替换告警JSON字段实现方案
针对修改告警JSON中data.context.resourceName字段的需求,直接使用工作流内置的setProperty函数即可快速实现,无需复杂的组件组合,具体操作步骤如下:
方案1:单Compose组件实现(最简方案)
触发告警接收后,直接新增1个Compose操作,在输入框中填入如下表达式即可:
setProperty(triggerBody(), 'data', setProperty(triggerBody()?['data'], 'context', setProperty(triggerBody()?['data']?['context'], 'resourceName', '替换后的目标值')))
表达式说明:
- Logic App 工作流语言中的对象为不可变类型,
setProperty会返回修改后的新对象,不会改动原对象 - 由于
resourceName嵌套在data→context层级下,需要嵌套调用3次setProperty逐层修改上层对象 - 你可以将表达式里的
'替换后的目标值'替换为任意你需要的动态值/固定值
后续所有需要用到修改后告警的操作,直接引用该Compose的输出即可,可通过运行历史查看输出确认字段替换结果。
方案2:变量修改实现(适合需要留存原告警的场景)
如果你需要先存储原告警内容再修改,按以下两步操作:
- 新增「初始化变量」操作,变量类型选择
Object,值设置为触发器接收的告警主体triggerBody() - 新增「设置变量」操作,选择刚才创建的对象变量,值填入如下表达式:
setProperty(variables('你的变量名'), 'data', setProperty(variables('你的变量名')?['data'], 'context', setProperty(variables('你的变量名')?['data']?['context'], 'resourceName', '替换后的目标值')))
把你的变量名替换为你实际创建的变量名称即可。
之前尝试的组件组合没有生效,是因为Logic App不支持直接对对象内的嵌套属性做可变赋值,必须通过setProperty生成新对象来完成属性修改。
内容的提问来源于stack exchange,提问作者Renato Silva
相关产品推荐
相关产品推荐

