0
0

More than 1 year has passed since last update.

PowerAutomateで配列の値をキー、キー(添字)を値とするマップをつくる

Last updated at Posted at 2022-08-03

前回に続きPowerAutomateで配列を操作するときに必要になったテクニックの紹介です。

Problem

文字列の配列について、その値をキーに、キー(添字)を値とするマップ(辞書)を作りたい。
例によってPowerAutomateにはこのようなオペレーションをシンプルに行うための関数は存在しない。
「Apply to each」アクションと配列変数を使う方法はフロー内で場所も時間もとってしまうので避けたい。

イメージ:
変換前 Array<String>
変換後 Map<String,Integer>

Solution

range()関数とjson()関数を活用します。

まずは例示のための配列を作成します:

image.png

[
  "foo",
  "bar",
  "baz"
]

次にrange()関数が生成する整数列を選択アクションで処理します。整数列は変換対象の配列と同じ長さを持ちます。
この整数を使って変換対象の配列から要素を取り出して、JSONオブジェクトのプロパティ・リテラル('"key": "value"')を作成します:

image.png

  • From: range(0, length(outputs('Compose_arrayX')))
  • Map: concat(outputs('Compose_arrayX')[item()], ':', item())

こうして作成したリテラルを','で繋げ、'{''}'で囲い、json()関数でJSONリテラルとしてパースします:

image.png

  • Inputs: json(concat('{', join(body('Select_property_literal'), ','), '}'))

以上です。
実行すると、このように変換ができていることがわかります:

image.png

{
  "foo": 0,
  "bar": 1,
  "baz": 2
}

応用:オブジェクトの配列をオブジェクトのマップに変換する

これを応用すると、オブジェクトの配列を(オブジェクトに含まれる任意のプロパティ値をキーとする)オブジェクトのマップに変換するフローも作成できます。

まずは例示のための配列を作成します:

image.png

[
  {
    "key": 1,
    "value1": "arrayA_item1_value1",
    "value2": "arrayA_item1_value2"
  },
  {
    "key": 2,
    "value1": "arrayA_item2_value1",
    "value2": "arrayA_item2_value2"
  },
  {
    "key": 3,
    "value1": "arrayA_item3_value1",
    "value2": "arrayA_item3_value2"
  }
]

次にJSONオブジェクトのプロパティ・リテラルを作るところですが、ここではrange()関数を使っても使わなくてもOKです。今回は使わない例:

image.png

  • From: outputs('Compose_arrayX')
  • Map: concat(item()['key'],':',removeProperty(item(), 'key'))

こうして作成したリテラルを','で繋げ、'{''}'で囲い、json()関数でJSONリテラルとしてパースします。ここは先ほどと一切替わりありません:

image.png

  • Inputs: json(concat('{', join(body('Select_property_literal'), ','), '}'))

実行した結果は次の通り:

image.png

{
  "1": {
    "value1": "arrayA_item1_value1",
    "value2": "arrayA_item1_value2"
  },
  "2": {
    "value1": "arrayA_item2_value1",
    "value2": "arrayA_item2_value2"
  },
  "3": {
    "value1": "arrayA_item3_value1",
    "value2": "arrayA_item3_value2"
  }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0