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

Power Automate中动态获取JSON内Hours对象的日期列表头问题

动态处理Power Automate中Excel表头映射问题

问题背景

现有JSON数据如下:

[
  {
    "TimePeriod": "12/12/23 - 12/26/23",
    "ResourceName": "rob brien",
    "TimesheetStatus": "Submitted",
    "SubmittedBy": "rob brien",
    "LastModified": "12/12/23 7:12 AM",
    "InvestmentTasks": [
      {
        "InvestmentID": "PRO13796",
        "Investment": "Credit Risk Regulatory ",
        "Description": "A3-Dev/Build",
        "Hours": {
          "12/12": 9,
          "12/13": 9,
          "12/14": 9,
          "12/15": 9,
          "12/16": 9,
          "12/17": 0,
          "12/18": 9,
          "12/19": 9,
          "12/20": 9,
          "12/21": 0,
          "12/22": 9,
          "12/23": 9,
          "12/24": 9,
          "12/25": 9,
          "12/26": 9,
          "Total": 99
        }
      }
    ]
  }
]

在Power Automate的「添加行到表格」步骤中,由于Hours对象下的日期键是动态的(数量、所属月份均不固定),无法固定映射Excel表头。尝试用Xpath函数处理,步骤如下:

  1. Xpath步骤:xpath(xml(body('Parse_JSON_Hours')), '/Hours/*')
  2. 应用到每个步骤:传入Xpath输出
  3. 每个项:xpath(item(), 'name(/*)')
    但触发错误:

Unable to process template language expressions in action 'xpath' inputs at line '0' and column '0': 'The template language function 'xml' parameter is not valid. The provided value cannot be converted to XML: 'JSON root object has multiple properties. The root object must have a single property in order to create a valid XML document. Consider specifying a DeserializeRootElementName. Path 'outputs.body.Sat_12_2

需要动态获取日期列表头,实现如下预期输出:

12/12   12/13
9       9    

   so on... 

错误原因

直接将Hours的JSON对象传入xml()函数会报错,因为XML要求根节点唯一,而Hours本身是多属性的JSON对象,没有单一根元素,不符合XML转换的要求。

解决方案

方法1:修复XML转换的根节点问题

修改Xpath步骤的表达式,先给Hours对象包裹一个根节点,再转换为XML:

xpath(xml(concat('<Root>', json(body('Parse_JSON_Hours')), '</Root>')), '/Root/*')

之后在「应用到每个」步骤中,分别获取节点信息:

  • 获取日期(表头):xpath(item(), 'name(/*)')
  • 获取对应小时数:xpath(item(), 'text(/*)')

方法2:使用keys()函数直接提取动态键(更高效)

无需依赖Xpath,直接用Power Automate内置的keys()函数提取Hours的所有键:

  1. 获取所有键(包含Total):keys(body('Parse_JSON_Hours'))
    返回结果为数组格式:['12/12', '12/13', ..., 'Total']
  2. 若需排除Total,用filter()函数过滤:
    filter(keys(body('Parse_JSON_Hours')), item() != 'Total')
    
  3. 在「应用到每个」步骤中,获取对应日期的小时数:body('Parse_JSON_Hours')[item()]

动态映射Excel表头与行数据

  1. 先将提取到的日期数组作为表头,写入Excel的表头行
  2. 提取对应小时数数组,与其他固定字段(如ResourceName、Investment等)组合,通过「添加行到表格」步骤完成动态列映射

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:03:36