You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Power Automate表达式提取表单数据并将数组转为字典?

解决Power Automate表单数据转换与变量存储问题

核心思路

避开数组索引的顺序依赖问题,用精准键匹配+空值兜底的方式安全取值,再组装成目标格式后存入变量。


方法一:用XPath+Coalesce直接组装目标JSON

适用于触发器输出为键值对数组的场景(比如常见的表单响应输出结构:[{"key":"字段名","value":"字段值"},...])

  1. 添加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会在字段缺失时返回空字符串,避免流程报错
  1. 存储变量
    创建对应变量后,直接从Compose输出中按属性名取值,比如:
  • Form ID变量值:outputs('Compose_目标JSON')?['Form ID']
  • Timezone变量值:outputs('Compose_目标JSON')?['Timezone']

方法二:Filter Array+Coalesce分步取值

如果觉得XPath表达式复杂,可拆分步骤:

  1. Filter Array操作,筛选目标字段:

    • 输入:triggerBody()?['value']
    • 条件:item()?['key'] 等于 "Form ID"
  2. 用Compose获取安全值:

coalesce(first(body('Filter_Array_Form_ID'))?['value'], '')

重复此步骤处理Timezone和User Timezone字段。

  1. 直接将每个Compose的输出赋值给对应变量即可。

为什么之前的方法失效?

  • 数组索引:依赖字段在数组中的固定位置,字段缺失或顺序变化就会取错值
  • Select/Parse JSON:如果未结合coalesce处理空值,字段缺失时会抛出空引用错误;且Parse JSON需要提前定义准确的schema,若触发器输出结构变动容易失效

内容的提问来源于stack exchange,提问作者cymWorx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:43:14