如何用Logicapp表达式读取父节点可变但层级固定的JSON子元素
解决方案
在Logic Apps中,表达式不支持直接用*作为通配符匹配动态对象键,你需要借助values()函数提取对象的所有值,再结合层级位置定位目标元素。针对你的场景,具体表达式如下:
1. 获取数组中所有element的值
@map(values(values(body('previous-action')?['root'])[0])[0], x => x?['element'])
该表达式会返回包含所有element值的数组,针对你的示例JSON,结果为["value1", "value2"]。
2. 获取数组中第一个元素的element值
@values(values(body('previous-action')?['root'])[0])[0][0]?['element']
针对示例JSON,该表达式会返回value1。
表达式拆解
body('previous-action')?['root']:定位到固定的root节点values(...):提取对象的所有值(因每个可变父节点下仅含一个子节点,取第一个值即可)- 第一层
values(body('previous-action')?['root'])[0]:获取root下可变节点(如abc1或xyz1)对应的对象 - 第二层
values(...)[0]:获取可变节点下的数组节点(如abc2或xyz2对应的数组) - 最后通过
map遍历数组提取element,或直接通过索引定位单个元素
为什么你的方法无效
Logic Apps的表达式语法不支持?['*']或?*这类通配符写法,无法直接匹配动态键名,必须通过values()函数将对象转换为值数组后再操作。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

