Power AutomateでJSONからシンプルな配列に変換する

2023/02/19

JSONから高速にシンプルな配列を作るには、遅いループで配列追加するよりも、「選択」のテキストモードを使うのがおすすめです。

Power Automateでは多くの応答がJSONで返ってきます。多くのデータが整理されているのは良いのですが、その中から特定の情報だけを抜き出す場合、ついaplly to eachを使ってテキストや配列に追加してしまいがちですが、ご存じのとおりループは非常に遅いので、「選択」のテキストモードを使って一発で配列化する方法を紹介します。

JSONのサンプルを得るために、SharePointのフォルダを取得できる「ルートフォルダのリスト」を使いました。一部省略していますが、だいたい以下のような感じの応答が返ってきます。

こちらの内容、Qiitaにも投稿しました!

[
  {
    "Id": "%252fShared%2bDocuments",
    "Name": "Shared Documents",
    "DisplayName": "Shared Documents",
    "Path": "/Shared Documents",
    "LastModified": "0001-01-01T00:00:00",
    "Size": 0,
    "IsFolder": true
  },
  {
    "Id": "%252fimages",
    "Name": "images",
    "DisplayName": "images",
    "Path": "/images",
    "LastModified": "0001-01-01T00:00:00",
    "Size": 0,
    "IsFolder": true
  },
  {
    "Id": "%252fFormServerTemplates",
    "Name": "FormServerTemplates",
    "DisplayName": "FormServerTemplates",
    "Path": "/FormServerTemplates",
    "LastModified": "0001-01-01T00:00:00",
    "Size": 0,
    "IsFolder": true
  },
  {
    "Id": "%252fSiteAssets",
    "Name": "SiteAssets",
    "DisplayName": "SiteAssets",
    "Path": "/SiteAssets",
    "LastModified": "0001-01-01T00:00:00",
    "Size": 0,
    "IsFolder": true
  }
]

これをまずは「選択」に単純に渡してみます。

[
  {
    "フォルダ名": "Shared Documents"
  },
  {
    "フォルダ名": "images"
  },
  {
    "フォルダ名": "FormServerTemplates"
  },
  {
    "フォルダ名": "SiteAssets"
  }
]

「選択」はその名の通り指定したキーだけを残してくれましたが、これでは波括弧がついていて使いづらい状態です。結局ループを回さないとフォルダ名だけを配列化できません。最終的に求めている配列は以下のようなイメージです。

["Shared Documents","images","FormServerTemplates","SiteAssets"]

「選択」をテキストモードで使う

「選択」の右側に「T」のようなボタンがあります。これをクリックすると、テキストモードに切り替わります。最初は以下のような感じになっています。

マップの部分を下のように編集します。Name以外の波括弧とキー名もぜんぶとっぱらいます。

テスト実行をしてみると、みごとに欲しかったName(今回の場合はフォルダ名)を配列にしたものが取得できています。超簡単ですね!

ちなみに、同じ処理をループでやってみると・・・

「選択」をつかった配列化の場合、今回のシンプルな処理は250ミリ秒でした。比較のために初期化したアレイ変数にループで追加していく処理の場合は、1秒かかりました。「選択」のほうが4倍速いという結果。でも元データが小さすぎてうまく比較できていないかも。そのうち大きなデータで比較して結果をお知らせします。

使い方は簡単だけど、あんまり紹介されてない?

「選択」をテキストモードをつかって簡単にJSONから必要なキーの値を配列に並べることができました。次回はさらに値の合計をループを回さずに取得するような処理を紹介しようと思います。

ほかにもPower AutometeのTIPSを逆引き形式で紹介していますので、よかったらお役立てください。