Power AutomateでJSONからシンプルな配列に変換する
JSONから高速にシンプルな配列を作るには、遅いループで配列追加するよりも、「選択」のテキストモードを使うのがおすすめです。
Power Automateでは多くの応答がJSONで返ってきます。多くのデータが整理されているのは良いのですが、その中から特定の情報だけを抜き出す場合、ついaplly to eachを使ってテキストや配列に追加してしまいがちですが、ご存じのとおりループは非常に遅いので、「選択」のテキストモードを使って一発で配列化する方法を紹介します。
JSONのサンプルを得るために、SharePointのフォルダを取得できる「ルートフォルダのリスト」を使いました。一部省略していますが、だいたい以下のような感じの応答が返ってきます。
[
{
"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を逆引き形式で紹介していますので、よかったらお役立てください。
ディスカッション
コメント一覧
まだ、コメントがありません