はじめに
Power Automate にて、アクションAで取得した結果とアクションBで取得した結果を結合したい。
などの要望はよくあります。(経験上度々質問されている気がする)
配列変数であれば「配列変数に追加」アクションで対応可能ですが、オブジェクト形式だとこちらのアクションが使えないですからね。
質問受ける割にやり方まとめられているの少ないな?と思ったので簡単にやり方まとめようと思います。
オブジェクトの結合を行う
今回のテストではこちらの JSON を利用します。
オブジェクト1 - 関東
[ { "都道府県コード": "JP11", "都道府県名": "埼玉県", "県庁所在地": "さいたま市", "人口": 734, "面積": 3797, "GDP": 22.9 }, { "都道府県コード": "JP12", "都道府県名": "千葉県", "県庁所在地": "千葉市", "人口": 628, "面積": 5157, "GDP": 19.3 }, { "都道府県コード": "JP13", "都道府県名": "東京都", "都庁所在地": "新宿区", "人口": 1404, "面積": 2194, "GDP": 120.7 }, { "都道府県コード": "JP14", "都道府県名": "神奈川県", "県庁所在地": "横浜市", "人口": 923, "面積": 2416, "GDP": 36.6 }, { "都道府県コード": "JP08", "都道府県名": "茨城県", "県庁所在地": "水戸市", "人口": 286, "面積": 6097, "GDP": 12.3 }, { "都道府県コード": "JP09", "都道府県名": "栃木県", "県庁所在地": "宇都宮市", "人口": 194, "面積": 6408, "GDP": 8.1 }, { "都道府県コード": "JP10", "都道府県名": "群馬県", "県庁所在地": "前橋市", "人口": 193, "面積": 6362, "GDP": 7.8 } ]
オブジェクト2 - 北関東
[ { "都道府県コード": "JP08", "都道府県名": "茨城県", "県庁所在地": "水戸市", "人口": 286, "面積": 6097, "GDP": 12.3 }, { "都道府県コード": "JP09", "都道府県名": "栃木県", "県庁所在地": "宇都宮市", "人口": 194, "面積": 6408, "GDP": 8.1 }, { "都道府県コード": "JP10", "都道府県名": "群馬県", "県庁所在地": "前橋市", "人口": 193, "面積": 6362, "GDP": 7.8 } ]
オブジェクト3 - 関西
[ { "都道府県コード": "JP25", "都道府県名": "滋賀県", "県庁所在地": "大津市", "人口": 141, "面積": 4017, "GDP": 5.7 }, { "都道府県コード": "JP26", "都道府県名": "京都府", "県庁所在地": "京都市", "人口": 256, "面積": 4613, "GDP": 13 }, { "都道府県コード": "JP27", "都道府県名": "大阪府", "県庁所在地": "大阪市", "人口": 880, "面積": 1905, "GDP": 40.1 }, { "都道府県コード": "JP28", "都道府県名": "兵庫県", "県庁所在地": "神戸市", "人口": 546, "面積": 8401, "GDP": 20.3 }, { "都道府県コード": "JP29", "都道府県名": "奈良県", "県庁所在地": "奈良市", "人口": 132, "面積": 3691, "GDP": 4.5 }, { "都道府県コード": "JP30", "都道府県名": "和歌山県", "県庁所在地": "和歌山市", "人口": 92, "面積": 4724, "GDP": 3.7 } ]
重複を削除して結合する
まずは一番単純なやり方で、重複を削除したうえでオブジェクトの結合を行うやり方です。
これは union
関数を利用します。
union(outputs('作成_-_関東'), outputs('作成_-_関西'))
上記式を実行することで以下のような結果が得られます。
[ { "都道府県コード": "JP11", "都道府県名": "埼玉県", "県庁所在地": "さいたま市", "人口": 734, "面積": 3797, "GDP": 22.9 }, { "都道府県コード": "JP12", "都道府県名": "千葉県", "県庁所在地": "千葉市", "人口": 628, "面積": 5157, "GDP": 19.3 }, { "都道府県コード": "JP13", "都道府県名": "東京都", "都庁所在地": "新宿区", "人口": 1404, "面積": 2194, "GDP": 120.7 }, { "都道府県コード": "JP14", "都道府県名": "神奈川県", "県庁所在地": "横浜市", "人口": 923, "面積": 2416, "GDP": 36.6 }, { "都道府県コード": "JP08", "都道府県名": "茨城県", "県庁所在地": "水戸市", "人口": 286, "面積": 6097, "GDP": 12.3 }, { "都道府県コード": "JP09", "都道府県名": "栃木県", "県庁所在地": "宇都宮市", "人口": 194, "面積": 6408, "GDP": 8.1 }, { "都道府県コード": "JP10", "都道府県名": "群馬県", "県庁所在地": "前橋市", "人口": 193, "面積": 6362, "GDP": 7.8 }, { "都道府県コード": "JP25", "都道府県名": "滋賀県", "県庁所在地": "大津市", "人口": 141, "面積": 4017, "GDP": 5.7 }, { "都道府県コード": "JP26", "都道府県名": "京都府", "県庁所在地": "京都市", "人口": 256, "面積": 4613, "GDP": 13 }, { "都道府県コード": "JP27", "都道府県名": "大阪府", "県庁所在地": "大阪市", "人口": 880, "面積": 1905, "GDP": 40.1 }, { "都道府県コード": "JP28", "都道府県名": "兵庫県", "県庁所在地": "神戸市", "人口": 546, "面積": 8401, "GDP": 20.3 }, { "都道府県コード": "JP29", "都道府県名": "奈良県", "県庁所在地": "奈良市", "人口": 132, "面積": 3691, "GDP": 4.5 }, { "都道府県コード": "JP30", "都道府県名": "和歌山県", "県庁所在地": "和歌山市", "人口": 92, "面積": 4724, "GDP": 3.7 } ]
union
関数は引数の数が決まっていないので複数のオブジェクトの結合が可能です。
union(outputs('作成_-_関東'), outputs('作成_-_関西'), outputs('作成_-_北関東'))
結果はこちら
[ { "都道府県コード": "JP11", "都道府県名": "埼玉県", "県庁所在地": "さいたま市", "人口": 734, "面積": 3797, "GDP": 22.9 }, { "都道府県コード": "JP12", "都道府県名": "千葉県", "県庁所在地": "千葉市", "人口": 628, "面積": 5157, "GDP": 19.3 }, { "都道府県コード": "JP13", "都道府県名": "東京都", "都庁所在地": "新宿区", "人口": 1404, "面積": 2194, "GDP": 120.7 }, { "都道府県コード": "JP14", "都道府県名": "神奈川県", "県庁所在地": "横浜市", "人口": 923, "面積": 2416, "GDP": 36.6 }, { "都道府県コード": "JP08", "都道府県名": "茨城県", "県庁所在地": "水戸市", "人口": 286, "面積": 6097, "GDP": 12.3 }, { "都道府県コード": "JP09", "都道府県名": "栃木県", "県庁所在地": "宇都宮市", "人口": 194, "面積": 6408, "GDP": 8.1 }, { "都道府県コード": "JP10", "都道府県名": "群馬県", "県庁所在地": "前橋市", "人口": 193, "面積": 6362, "GDP": 7.8 }, { "都道府県コード": "JP25", "都道府県名": "滋賀県", "県庁所在地": "大津市", "人口": 141, "面積": 4017, "GDP": 5.7 }, { "都道府県コード": "JP26", "都道府県名": "京都府", "県庁所在地": "京都市", "人口": 256, "面積": 4613, "GDP": 13 }, { "都道府県コード": "JP27", "都道府県名": "大阪府", "県庁所在地": "大阪市", "人口": 880, "面積": 1905, "GDP": 40.1 }, { "都道府県コード": "JP28", "都道府県名": "兵庫県", "県庁所在地": "神戸市", "人口": 546, "面積": 8401, "GDP": 20.3 }, { "都道府県コード": "JP29", "都道府県名": "奈良県", "県庁所在地": "奈良市", "人口": 132, "面積": 3691, "GDP": 4.5 }, { "都道府県コード": "JP30", "都道府県名": "和歌山県", "県庁所在地": "和歌山市", "人口": 92, "面積": 4724, "GDP": 3.7 } ]
なおこちらの関数は重複が削除されますので、以下のような場合は全件得ることはできません。
union(outputs('作成_-_関東'), outputs('作成_-_北関東'))
重複削除された結果
[ { "都道府県コード": "JP11", "都道府県名": "埼玉県", "県庁所在地": "さいたま市", "人口": 734, "面積": 3797, "GDP": 22.9 }, { "都道府県コード": "JP12", "都道府県名": "千葉県", "県庁所在地": "千葉市", "人口": 628, "面積": 5157, "GDP": 19.3 }, { "都道府県コード": "JP13", "都道府県名": "東京都", "都庁所在地": "新宿区", "人口": 1404, "面積": 2194, "GDP": 120.7 }, { "都道府県コード": "JP14", "都道府県名": "神奈川県", "県庁所在地": "横浜市", "人口": 923, "面積": 2416, "GDP": 36.6 }, { "都道府県コード": "JP08", "都道府県名": "茨城県", "県庁所在地": "水戸市", "人口": 286, "面積": 6097, "GDP": 12.3 }, { "都道府県コード": "JP09", "都道府県名": "栃木県", "県庁所在地": "宇都宮市", "人口": 194, "面積": 6408, "GDP": 8.1 }, { "都道府県コード": "JP10", "都道府県名": "群馬県", "県庁所在地": "前橋市", "人口": 193, "面積": 6362, "GDP": 7.8 } ]
全件結合を行う
重複削除した結果を結合したいのであれば先ほどのやり方でもいいのですが、場合によっては全件そのまま結合したい場合があるかと思います。
そのような場合は選択アクションを活用して結合を行います。
理論としては以下のような感じです。
from
で、0からはじまる、結合するオブジェクトの長さの合計分だけの配列を作成します。Map
では結合するオブジェクトの要素を順に参照していきます。
1つ目のオブジェクトの参照が終わったら、2つ目のオブジェクトを順に参照していくことになります。
実際に設定する式は以下のようになります。
from
range( 0, add( length(outputs('作成_-_関東')), length(outputs('作成_-_北関東')) ) )
Map
if( less(item(), length(outputs('作成_-_関東'))), outputs('作成_-_関東')?[item()], outputs('作成_-_北関東')?[sub(item(), length(outputs('作成_-_関東')))] )
Power Automate で配列の要素を参照する際は0から参照することになりますのでこのようにしています。
おわりに
重複削除してもよいかどうか?でやり方変わってきますので、その時々の要件によって実装してください。