のいのログ

【Power Automate】クラウドフローで簡単にJSONのキーを取得する方法

JSONデータを扱う際、特定階層のキーのみを取得したいケースは少なくありません。

本記事では、Power Automateを使ってJSONデータからキーを簡単に抽出する方法を紹介します。全角文字や記号を含むキーでも問題なく抽出できる手法です。

目次(クリックでジャンプできます)

大まかな流れ

  1. キーを取り出したい階層のCSVテーブルの作成
  2. split関数とdecodeUriComponent関数で、改行コードを基準にデータを行ごとに分割
  3. ②の出力の一番最初の要素を、split関数を使ってカンマ区切りで取り出す

具体的な手順

今回は以下のJSONを使ってキーを抽出していきます。

JSON
{
  "": "太郎",
  "": "山田",
  "性別": "",
  "都道府県": "東京都",
  "市区町村": "千代田区",
  "番地以下・建物名": "千代田3-1-1"
}

1. キーを取り出したい階層のCSVテーブルの作成

CSVテーブルの作成」アクションを使用して、キーを取り出したい階層をCSV形式に変換します。

このアクションにより、キーが1行目、値が2行目に格納されたCSVテーブルが生成されます。

取り出したい階層が配列になっていない場合は、変換したいオブジェクト型をarray関数で配列に変換してからコネクタの処理を行いましょう。

2. 改行コードを元に行で分割

作成」アクションを追加し、入力に以下の式を設定します:

split(body('CSV_テーブルの作成'), decodeUriComponent('%0D%0A'))

ここでのポイント

  • decodeUriComponent('%0D%0A')は改行コード\r\nのURLエンコード表現です
  • この改行コードを区切り文字としてsplit関数で分割しています

この処理により、CSVテーブルが以下の構造の配列に変換されます。

  • 1要素目:キーの羅列(カンマ区切り)
  • 2要素目:値の羅列(カンマ区切り)

3. キー一覧の抽出

続いて、もう一つ「作成」アクションを追加し、valueに以下の式を設定します。

split(first(outputs('作成_-_CSVの全行')), ',')

この数式では以下の処理を行っています。

  1. 手順2で作成した配列の最初の要素(キーの羅列が格納された文字列)をfirst関数で取得
  2. それをsplitでカンマ基準で区切り、各キーが独立して格納された配列を生成

これで、各JSONキーを個別に格納した配列が完成しました。

[
  "",
  "",
  "性別",
  "都道府県",
  "市区町村",
  "番地以下・建物名"
]

配列なのでApply to Eachなどのループアクションで簡単に処理できます。

[補足]うまくいかなかった方法

他の方の記事で紹介されていたXMLを活用する方法も試しましたが、いくつかの問題がありました。

xml関数でJSONデータをXML形式に変換する際、全角記号が含まれていると自動的にUnicodeエスケープシーケンスに置き換えられてしまいます。

{ 
    "番地以下・建物名": "千代田3-1-1" 
}
<番地以下_x30FB_建物名>
    千代田3-1-1
</番地以下_x30FB_建物名>

// JSONに戻しても...
{
    "key": "番地以下_x30FB_建物名"
}

これだけならreplace関数で個別に置換処理すればいいと思うでしょう。

しかし、Microsoft Formsのアンケート結果が集約されるExcelシートではどうでしょう。

変換前(JSON)
{
  "飲食店を選ぶ際に「最も重視する点」は何ですか?(例:価格・味・雰囲気など)": "価格"
}
変換後(XML)
<飲食店を選ぶ際に_x300C_最も重視する点_x300D_は何ですか_xFF1F__xFF08_例_xFF1A_価格_x30FB_味_x30FB_雰囲気など_xFF09_>
    価格
</飲食店を選ぶ際に_x300C_最も重視する点_x300D_は何ですか_xFF1F__xFF08_例_xFF1A_価格_x30FB_味_x30FB_雰囲気など_xFF09_>

中点(・)や括弧などの記号を含むキーを扱うケースは多いと思います。私の場合、後の例のように複数種類の記号が含まれていたため、XML変換方式は断念しました。

まとめ

JSONのキーを扱いたいとき(特に全角記号を含むとき)には、一度CSVテーブル化すると文字を損なわずに取り出せます。

Power AutomateのクラウドフローだとCSVは扱いにくいのであまり使われていない印象ですが、こういった場面で思わぬ活躍するのは面白いですね。

シェアしていただけると嬉しいです!
  • URLをコピーしました!

この記事を書いた人

ローコード・RPAエンジニア。DX・業務効率化を専門に開発。

前職では鉄道運転士として働きながら、社内複業でSwift・Power Platformで業務効率化を推進していた。

コメント

コメントする

CAPTCHA


目次(クリックでジャンプできます)