28.4K Views
June 23, 22
スライド概要
Power AutomateにおけるJSONについて説明
Power Platfrom 関連が多いです。
JSONについて 気ままに勉強会 #06
今日の目標 JSONコワクナイヨー
アジェンダ 1. JSONとは 2. Power AutomateでJSONが怖くなくなると 3. Power AutomateでJSONを扱う 4. Power AutomateでJSONの発展
Miyake Mito @MiTo60448639 https://qiita.com/MiyakeMito https://www.icsoft.jp/
本日の参考サイト ■ JSONと仲良くなるために (まとめ) https://mofumofupower.hatenablog.com/entry/2020/09/04/190039 ■ Apply to each のパフォーマンス改善 (配列加工の場合) https://mofumofupower.hatenablog.com/entry/2020/08/12/093000 ■ JSON でほしいデータを取得する "Path" を確認するツールのご紹介 https://mofumofupower.hatenablog.com/entry/2021/04/22/155214 ■ Power Automateの裏側をみてみよう! (1/2) https://qiita.com/h-nagao/items/be565fdac60a9b2968d5 ■ Power Automateの裏側をみてみよう (2/2) https://qiita.com/h-nagao/items/4f590a6e3b21ea669d0d
JSON とは
本日のJSON { "名前": "アメリカ合衆国", "地区": "北アメリカ", "地理": { "首都": "ワシントンD.C.", "面積": 9834000, "人口": 331003000, "主要都市": [ {"名前": "ニューヨーク", "人口": 17799861}, {"名前": "ロサンゼルス", "人口": 11789487}, {"名前": "シカゴ", "人口": 8307904}, {"名前": "ホノルル", "人口": 718182} ] }, "言語": [ "英語", "フランス語", "ハワイ語", "スペイン語" ], "渡航歴": true }
JSONのルール:その1 { “名前”: “アメリカ合衆国” } 1. 「キー」と「値」で構成され、コロンで繋げます 2. 「キー」はダブルクオーテーションで囲みます 3. 「キー:値」はカーリーブラケットで囲みます
JSONのルール:その2 { "名前": "アメリカ合衆国", "地区": "北アメリカ", 4. 複数「キー:値」が並ぶときは、カンマで 区切ります “地理": { "首都": "ワシントンD.C.", "面積": 9834000, "人口": 331003000 }, "言語": [ "英語", "フランス語", "ハワイ語", "スペイン語" ], "渡航歴": true } 5. 「値」には以下の型が設定できます ① 文字列 ② 数字 ③ Boolean型(true/false) ④ オブジェクト ⑤ 配列 ⑥ null
練習➀ ➀首都の情報をJSONで記載してください ・首都 は ワシントンD.C. { “首都”: “ワシントンD.C.” } ② ➀に以下の情報を追加してください ・面積 は 9834000 ・人口 は 331003000 { "首都": "ワシントンD.C.", "面積": 9834000, "人口": 331003000 }
JSONのルール:オブジェクト { "地理": { "首都": "ワシントンD.C.", "面積": 9834000, "人口": 331003000 } } JSONを複雑怪奇にする困ったヤツ、その1 • • • • 「キー:値」はオブジェクト 「キー」に対し、「キー:値」(オブジェクト)を「値」として設定できます オブジェクトを入れ子にすると構造は階層化しますが、情報がグループ化され 意味づけがされます データを取得する際は、[‘キー’]⇒[‘キー’] と階層をネストしながら指定します
JSONのルール:配列 "言語": [ ] "主要都市": [ "英語", {"名前": "ニューヨーク", "人口": 17799861}, "フランス語", {"名前": "ロサンゼルス", "人口": 11789487}, "ハワイ語", {"名前": "シカゴ", "人口": 8307904}, "スペイン語" {"名前": "ホノルル", "人口": 718182} ] JSONを複雑怪奇にする困ったヤツ、その2 • 同一型の複数データを連続的に並べたデータ構造です • ブラケットで囲み、各アイテム(要素)はカンマで区切ります • データを取得する際は、添え字(何個目のデータ)を指定します • 各要素は、オブジェクトで指定することも可能です
JSONの階層化 { "名前": "アメリカ合衆国", "地区": "北アメリカ", "地理": { "首都": "ワシントンD.C.", "面積": 9834000, "人口": 331003000, "主要都市": [ {"名前": "ニューヨーク", "人口": 17799861}, {"名前": "ロサンゼルス", "人口": 11789487}, {"名前": "シカゴ", "人口": 8307904}, {"名前": "ホノルル", "人口": 718182} ] }, "言語": [ "英語", "フランス語", "ハワイ語", "スペイン語" ], "渡航歴": true } こんなJSONから、 Power Automate で 目的の「キー」に対する 値を取得する方法を説明 します
Power Automateで JSONが 怖くなくなると
Power AutomateでのJSON
Power AutomateでのJSON トリガーの Input と Output は JSON です
アクションの Input と Output も JSON です
どう活用できるの? 「動的なコンテンツ」で、目的の項目が取得しにくいとき ダイレクトにコンテンツの指定が可能 triggerBody()?['events']?[0]?['message']?['type']
実行速度が遅すぎる Apply to each を撲滅したいとき 承認者は一人なのに、 自動でApply to each になっちゃう お、遅い・・・ outputs('開始して承認を待機')?['body']?['responses']?[0]?['responder']?['email'] ダイレクトにコンテンツの指定が可能
トリガーの実行条件を絞りたいとき トリガーの実行条件を 設定できます ■ 条件に合わない時はフローが着火しない為、実行回数の節約に効きます ■ SPOの「アイテムが作成または変更されたとき」の作成のみ条件とした い場合 @equals(triggerBody()?['{VersionNumber}'],'1.0') ・・・など
Adaptive Cards に変数を入れたいとき JSONの構造が分かると、 カスタマイズし放題です
Power Automateで JSONを扱う
ここで Automate の設定変更 設定 ⇒すべての Power Automate 設定を表示 試験的な機能 をオン
JSONを作る ■ 「データ操作」-「作成」 ■ 「変数を初期化する」 全体が { } で囲まれている ⇒ オブジェクト 全体が [ ] で囲まれている ⇒ アレイ
目的の値をゲット-JSONの解析 「データ操作」-「JSONの解析」でJSONから目的の項目が 取得できます 項目が参照できる JSONを貼付け
目的の値をゲット-アクション編 JSON Pretty Linter (https://lab.syncer.jp/Tool/JSON-Viewer/) ①実行履歴の未加工出力の表示を JSON Pretty Linter へ貼付けする
ビューアーで[Path]を有効化し、 目的の値のパスをクリック object['body']['responses'][0]['responder']['displayName'] ②Objectを outputs(‘Action名’)? に 置換する outputs('開始して承認を待機’)? ['body']?['responses']?[0]?['responder']?['displayName'] ③ブラケット間に”?”を挿入
目的の値をゲット-トリガー編 ①実行履歴の 未加工出力の表示を JSON Pretty Linter貼付けする object['body']['body']['content'] ②Objectを trigger()? に置換する trigger()?['body']?['body']?['content'] ③ブラケット間に”?”を挿入
目的の値をゲット-変数編 ①変数で入力した値をJSON Pretty Linter貼付けする object[0]['名前'] ②Objectを variables(‘変数名‘)? に置換する variables('CountryInformation')?[0]?['名前'] ③ブラケット間に”?”を挿入
Power Automateで JSONの発展
Apply to each 対策 Apply to each は極力撲滅! ・・・遅い
Apply to each 対策① JSON配列の 全レコードから特定のカラム を取得する場合は 選択(と結合) [開始]に含まれるカラムは item()?[‘カラム名’] で取得できる
Apply to each 対策② JSON配列の 特定のレコードの特定のカラム を取得する場合は JSON Pretty Linter
「選択」アクションがあると・・・ Apply to Each なしで ■ 文字列を1文字ずつ配列に変換
「選択」アクションがあると・・・ Apply to Each なしで 文字列の指定の位置を変換
色々使うと オセロも作れます Power Virtual Agetns も利用してます
まとめ JSON怖くないでしょ? むしろ好きになっちゃった? 使いこなして面白フローをつくろう!
ありがとうございました