我想使用 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”操作将会失败,因为它需要数组。
任何帮助将不胜感激。
好吧,这不太友好,但会给你一个结果。
本质上,您需要将 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"
]
}
}