如何使用强大的自动化表达式检索数据值并将数组转换为字典?

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

我有一个将数据发送到电源自动化流程的表单。流程触发器的输出如下所示。

如何转换数据以输出这种格式

{
    "Form ID": "67249",
    "Timezone": "America/Denver",
    "User Timezone": "America/Denver"
 }

所以我可以使用属性名称将输出存储在变量中?

我尝试使用数组索引并且它有效,但是当省略字段时,索引会向上移动并存储错误的变量值。还尝试使用 select 和 parse json 但该操作输出一个键,该键是数组中的每个对象。 Select 返回结果但无法将其存储在不同的变量中。

dynamics-crm powerapps power-automate
2个回答
0
投票

有点笨重,但你可以这样做......

说明

首先,我用一组键值对初始化一个

Array
变量。这不是您的具体数据,但这并不重要。看起来像这样...

[
  {
    "key": "Key 1",
    "value": "Value 1"
  },
  {
    "key": "Key 2",
    "value": "Value 2"
  },
  {
    "key": "Key 3",
    "value": "Value 3"
  },
  {
    "key": "Key 4",
    "value": "Value 4"
  },
  {
    "key": "Key 5",
    "value": "Value 5"
  }
]

第二个和第三个,我初始化了两个

Object
类型的空变量。我需要临时版本是有原因的,稍后我会解释。

第四,需要循环遍历键值对数组。您将在该数组中施展魔法。

第五,您需要使用

Set variable
操作并确保将其分配给临时结果对象。

该步骤中的表达式是...

addProperty(variables('Resulting Object'), item()['key'], item()['value'])

...而需要 temp 变量的原因是因为在使用

Set variable
操作时,您无法进行自我分配。所以基本上,表达式不能用于您正在设置的变量。您可以在
addProperty
表达式中看到,我们指的是非临时结果对象变量,而不是临时变量。

第六,现在将临时对象转移到主对象。我们这样做是因为下次循环出现时,它将引用主/非临时对象并保留我们之前添加的所有现有属性。

最后,这就是最终结果...

{
  "Key 1": "Value 1",
  "Key 2": "Value 2",
  "Key 3": "Value 3",
  "Key 4": "Value 4",
  "Key 5": "Value 5"
}

注意:我将循环的并发度设置为1,以保持键值对的顺序。您可以选择执行或不执行此操作。


0
投票

这是另一种一步法。

json(
    replace( replace( replace( replace( 
        string( outputs('Compose') ),
    '[{"key":', '{'),  ']', ''), '},{"key":', ','), ',"value"', '')
)

将 json 数组转换为字符串,进行一些字符串替换,然后再次返回 json。

enter image description here

enter image description here

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