如何用Power Automate表达式提取表单数据并将数组转为字典?
解决Power Automate表单数据转换与变量存储问题
核心思路
避开数组索引的顺序依赖问题,用精准键匹配+空值兜底的方式安全取值,再组装成目标格式后存入变量。
方法一:用XPath+Coalesce直接组装目标JSON
适用于触发器输出为键值对数组的场景(比如常见的表单响应输出结构:[{"key":"字段名","value":"字段值"},...])
- 添加Compose操作,输入以下表达式组装目标JSON:
{ "Form ID": "@coalesce(first(xpath(xml(json(concat('{"root":', triggerBody()?['value'], '}'))), '//root/key[text()="Form ID"]/following-sibling::value/text()')), '')", "Timezone": "@coalesce(first(xpath(xml(json(concat('{"root":', triggerBody()?['value'], '}'))), '//root/key[text()="Timezone"]/following-sibling::value/text()')), '')", "User Timezone": "@coalesce(first(xpath(xml(json(concat('{"root":', triggerBody()?['value'], '}'))), '//root/key[text()="User Timezone"]/following-sibling::value/text()')), '')" }
xpath用于精准匹配对应key的value,不受数组顺序影响coalesce会在字段缺失时返回空字符串,避免流程报错
- 存储变量
创建对应变量后,直接从Compose输出中按属性名取值,比如:
- Form ID变量值:
outputs('Compose_目标JSON')?['Form ID'] - Timezone变量值:
outputs('Compose_目标JSON')?['Timezone']
方法二:Filter Array+Coalesce分步取值
如果觉得XPath表达式复杂,可拆分步骤:
Filter Array操作,筛选目标字段:
- 输入:
triggerBody()?['value'] - 条件:
item()?['key']等于"Form ID"
- 输入:
用Compose获取安全值:
coalesce(first(body('Filter_Array_Form_ID'))?['value'], '')
重复此步骤处理Timezone和User Timezone字段。
- 直接将每个Compose的输出赋值给对应变量即可。
为什么之前的方法失效?
- 数组索引:依赖字段在数组中的固定位置,字段缺失或顺序变化就会取错值
- Select/Parse JSON:如果未结合
coalesce处理空值,字段缺失时会抛出空引用错误;且Parse JSON需要提前定义准确的schema,若触发器输出结构变动容易失效
内容的提问来源于stack exchange,提问作者cymWorx
相关产品推荐
相关产品推荐

