14
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Power Automate for desktop「データ テーブルからJSON文字列の作成方法」

Last updated at Posted at 2022-12-12

この記事は「Microsoft Power Automate Advent Calendar 2022」13日目の参加記事です。

12日目は

概要

Power Automate for desktopとの付き合いはかれこれ2年になります。
今回取り上げる「カスタム オブジェクトをJSONに変換」アクションは、2年前あまりうまく動作しませんでした。しかし、いまはさまざまな構造をもつデータをJSON文字列に変換することができます。このアクションを利用し、データ テーブルからJSON文字列を作成します。

注意事項

  • 2022年12月の情報です
  • Power Automate for desktop 2.227.177.23340
  • Windows 10 Pro 21H2
  • 個人調べであることをご理解ください
  • 実験的な試みですので自己責任でお願いいたします

ひとつのデータ テーブルからJSONを作成する場合

image.png
image.png

  1. サンプルデータ
    image.png

  2. カスタム オブジェクトを作成し、プロパティ名を設定、値にデータ テーブルを代入します
    image.png
    カスタム オブジェクトについて
    https://learn.microsoft.com/ja-jp/power-automate/desktop-flows/variable-data-types#custom-object

    今回はカスタム オブジェクトのプロパティ名に'brother'としてリテラルにしていますが変数を用いて動的にすることも可能です。

  3. JSONに変換
    image.png

2でつくったカスタム オブジェクトを展開すると、値にデータ テーブル型のまま入っています。

image.png
image.png

%{ 'brother': { ^['name', 'age', 'phone'], ['ichiro', 32, '000-000-0001'], ['jiro', 25, '000-000-0002'], ['saburo', 20, '000-000-0003'] } }%

このようなデータですが、「カスタム オブジェクトをJSONに変換」アクションはいい感じに解析し、JSONに変換してくれています。データ テーブルの列名をプロパティ名に、データを値に振り分け、文字列と数値を判別し、文字列に対し""囲みも行っています。

image.png

サンプルフロー

Variables.CreateNewDatatable InputTable: { ^['name', 'age', 'phone'], [$'''ichiro''', 32, $'''000-000-0001'''], [$'''jiro''', 25, $'''000-000-0002'''], [$'''saburo''', 20, $'''000-000-0003'''] } DataTable=> DataTable
SET NewVar TO { 'brother': DataTable }
Variables.ConvertCustomObjectToJson CustomObject: NewVar Json=> CustomObjectAsJson

複数データ テーブルからJSONを作成する(データ テーブルが配列関係の場合)

カスタム オブジェクト>リスト>データ テーブルとネストしていても、しっかり解析されてJSON文字列にしてくれました。

image.png

image.png

  1. サンプルデータ
    image.png

  2. サンプルデータ
    image.png

  3. 空のリストを作成

  4. リストに1つめのデータ テーブルを%{name:value}%でカスタム オブジェクトとして追加
    image.png

  5. リストに2つめのデータ テーブルを追加
    image.png

  6. リストをカスタム オブジェクトに格納
    image.png

  7. JSONに変換
    image.png

サンプルフロー

Variables.CreateNewDatatable InputTable: { ^['Code', 'PuroductsName', 'quantity'], [$'''002''', $'''HDD''', 2], [$'''004''', $'''CPU''', 1], [$'''005''', $'''FAN''', 1] } DataTable=> OrderDataTable1
Variables.CreateNewDatatable InputTable: { ^['Code', 'PuroductsName', 'quantity'], [$'''004''', $'''CPU''', 3], [$'''005''', $'''FAN''', 3], [$'''006''', $'''SSD''', 4] } DataTable=> OrderDataTable2
Variables.CreateNewList List=> List
Variables.AddItemToList Item: { '00001': OrderDataTable1 } List: List
Variables.AddItemToList Item: { '00002': OrderDataTable2 } List: List
SET NewVar TO { 'Order': List }
Variables.ConvertCustomObjectToJson CustomObject: NewVar Json=> CustomObjectAsJson

複数データ テーブルからJSONを作成する(データ テーブルを入れ子構造にした場合)

image.png

  1. 子になるデータ テーブルを先に作成
    image.png

  2. 親データ テーブルの作成
    子になるデータ テーブル%OrderDetail%を値に使用し、入れ子にします
    image.png

  3. 入れ子になったデータ テーブルをカスタム オブジェクトに格納
    image.png

  4. JSONに変換
    image.png

サンプルフロー

Variables.CreateNewDatatable InputTable: { ^['Code', 'PuroductsName', 'quantity'], [$'''004''', $'''CPU''', 2], [$'''005''', $'''FAN''', 3], [$'''006''', $'''SSD''', 4] } DataTable=> OrderDetail
Variables.CreateNewDatatable InputTable: { ^['CustomerName', 'Email', 'Adress', 'OrderDetail'], [$'''taro yamada''', $'''example@example.com''', $'''Tokyo JAPAN''', OrderDetail] } DataTable=> OrderDataTable
SET NewVar TO { 'order': OrderDataTable }
Variables.ConvertCustomObjectToJson CustomObject: NewVar Json=> CustomObjectAsJson

まとめ

「カスタム オブジェクトをJSONに変換」アクションを使いデータ テーブルからJSON文字列を作成することができ、このアクションすげえってなりました。一方で公式ドキュメントは受入「カスタム オブジェクト」と書かれているだけなので、データ テーブルを値に格納したカスタム オブジェクトはサポートされているのか微妙なところです。なので実用する時はもう少し検証が必要です。

Power Automate for desktopとの付き合いはGAされた2020年12月からなのですが、個人的な学習環境は、こんなことに。
CleanShot 2022-12-11 at 16.09.08@2x.png
ざっとフローを見返したのですが、アウトプットをサボっていると陽の目を見ないフローがいつの間にか増えています。そしてドキュメント化していないものは全く覚えていません。今回のネタも眠っていました。💦
学習したことは都度アウトプットする重要性を痛感しました。

Microsoft Power Automate Advent Calendar 2022明日14日目は@fufufu100さん、@yukio_365さん、@MiyakeMitoさんの担当です。今年は賑やかですね!

ついでに、今日は私の誕生日です。😀

14
2
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
14
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?