如何在 Power Automate 中循环使用具有动态属性的 JSON

问题描述 投票:0回答:1

我想使用 Power Automate 调用 TSheet timesheets api 来获取数据并处理它。但我在循环遍历 TSheet 的响应数据时遇到困难。所以这是响应的 json 的示例:

{
    "results": {
        "timesheets": {
            "1234567": {
                "id": 1234567,
                "state": "CLOSED",
                "user_id": 123456
            },
            "2345678": {
                "id": 415628812,
                "state": "APPROVED",
                "user_id": 234567
            }
        }
    }
}

我已经使用“解析 JSON”和“撰写”操作尝试将此 JSON 格式化为 JSON 数组,以便我可以在“应用到每个”操作上使用它,但我还没有弄清楚如何操作。将此 json 对象传递给“Apply to Each”操作将会失败,因为它需要数组。

任何帮助将不胜感激。

power-automate
1个回答
0
投票

好吧,这不太友好,但会给你一个结果。

Flow

本质上,您需要将 JSON 转换为 XML 并按照这种方式进行。

这些是步骤...

撰写数据

这是您提供的 JSON,只需粘贴到该操作中即可。

撰写 XML

在这里,我们将 JSON 转换为 XML。 你可以通过这个表达来做到这一点...

xml(outputs('Compose_Data'))

撰写时间表项目

这是一个 XPath 查询,用于将项目分离到数组中,以便您可以循环它们。

xpath(xml(outputs('Compose_XML')), '//timesheets/*')

对于每个元素

正在循环之前操作的结果。

outputs('Compose_Timesheet_Items')

撰写项目

在这里,我们解码该项目的内容,因为它当前存储为 base64。

xml(decodeBase64(item()['$content']))

编写 JSON 项目

我们可以在这里编写一个小型 JSON 对象,其中包含您想要从每个项目中获取的数据。 它使用 XPath 提取每个属性。

{
  "id": @{first(xpath(xml(outputs('Compose_Item')), '//id/text()'))},
  "state": @{first(xpath(xml(outputs('Compose_Item')), '//state/text()'))},
  "user_id": @{first(xpath(xml(outputs('Compose_Item')), '//user_id/text()'))}
}

从那里,您可以对对象执行您需要的操作。 您可以将其添加到数组中或在线处理数据。

我还应该注意,所有这些都可以在不循环的情况下完成。

如果使用

Select
操作而不是循环,则可以更快地完成它。 这是
Select
的定义,你需要挑选零件来设置它......

{
  "type": "Select",
  "inputs": {
    "from": "@outputs('Compose_Timesheet_Items')",
    "select": {
      "id": "@first(xpath(xml(xml(decodeBase64(item()['$content']))), '//id/text()'))",
      "state": "@first(xpath(xml(xml(decodeBase64(item()['$content']))), '//state/text()'))",
      "user_id": "@first(xpath(xml(xml(decodeBase64(item()['$content']))), '//user_id/text()'))"
    }
  },
  "runAfter": {
    "Compose_Timesheet_Items": [
      "Succeeded"
    ]
  }
}

Select

© www.soinside.com 2019 - 2024. All rights reserved.