Logic Apps中遍历JSON嵌套可选数组并提取指定字段的方法咨询
作为Logic Apps新手,处理这种嵌套且带有可选字段的数组确实容易犯难,我来一步步带你实现这个迭代需求,帮你理清逻辑~
我们需要通过嵌套Foreach循环来遍历多层数组,同时用Condition判断来处理可选的actions字段,确保在它不存在时不会报错,还能正确提取所有需要的字段。
1. 先解析JSON数据
首先确保你已经拿到目标JSON数据(比如通过HTTP触发器、Blob读取等方式),然后添加一个Parse JSON动作:
- 输入选择你获取到的原始JSON字符串
- 点击「Use sample payload to generate schema」,把你提供的JSON去掉顶部的
"bullseye":字段后粘贴进去,自动生成Schema。这一步能让Logic Apps识别JSON的结构,方便后续访问字段。
2. 外层遍历:遍历rings数组
添加一个Foreach循环动作,循环的输入选择:
body('Parse_JSON')?['rings']
(这里的Parse_JSON是你刚才添加的解析动作名称,记得根据实际情况修改)
3. 中层遍历:提取expansionCriteria的type和threshold
在第一个Foreach循环内部,再添加一个Foreach循环,输入选择当前ring里的expansionCriteria数组:
items('For_each')?['expansionCriteria']
在这个循环里,你可以直接访问每个条件的字段:
- 获取
type:items('For_each_2')?['type'] - 获取
threshold:items('For_each_2')?['threshold']
你可以添加Compose或者Append to array variable动作,把这些值保存起来(比如存入一个数组变量,方便后续使用)。
4. 判断并处理可选的actions和skillsToRemove
在第一个Foreach循环内部(和第二个Foreach同级),添加一个Condition动作,判断条件设置为:
not(empty(items('For_each')?['actions']))
这个表达式的作用是检查当前ring是否存在非空的actions字段。
如果条件为真(存在actions)
在True分支里添加第三个Foreach循环,输入选择skillsToRemove数组:
items('For_each')?['actions']?['skillsToRemove']
在这个循环里,你可以访问每个技能的信息:
- 技能名称:
items('For_each_3')?['name'] - 技能ID:
items('For_each_3')?['id'] - 技能URI:
items('For_each_3')?['selfUri']
同样用Compose或Append to array variable来保存这些数据。
如果条件为假(没有actions)
可以留空,或者添加一个Log动作记录「当前ring无actions字段」,方便后续排查。
- 所有字段访问都用
?:比如items('For_each')?['actions'],这是Logic Apps里的安全访问运算符,如果字段不存在,不会抛出错误,只会返回null,避免流程中断。 - 变量初始化:如果需要把所有提取的数据汇总,可以提前初始化几个数组变量(比如
expansionCriteriaList、skillsToRemoveList),在每个循环里用Append to array variable把数据加进去。
内容的提问来源于stack exchange,提问作者AnatoliT

