Slide 1

Slide 1 text

JSONについて 気ままに勉強会 #06

Slide 2

Slide 2 text

今日の目標 JSONコワクナイヨー

Slide 3

Slide 3 text

アジェンダ 1. JSONとは 2. Power AutomateでJSONが怖くなくなると 3. Power AutomateでJSONを扱う 4. Power AutomateでJSONの発展

Slide 4

Slide 4 text

Miyake Mito https://www.icsoft.jp/ @MiTo60448639 https://qiita.com/MiyakeMito

Slide 5

Slide 5 text

本日の参考サイト ■ 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

Slide 6

Slide 6 text

JSON とは

Slide 7

Slide 7 text

本日のJSON { "名前": "アメリカ合衆国", "地区": "北アメリカ", "地理": { "首都": "ワシントンD.C.", "面積": 9834000, "人口": 331003000, "主要都市": [ {"名前": "ニューヨーク", "人口": 17799861}, {"名前": "ロサンゼルス", "人口": 11789487}, {"名前": "シカゴ", "人口": 8307904}, {"名前": "ホノルル", "人口": 718182} ] }, "言語": [ "英語", "フランス語", "ハワイ語", "スペイン語" ], "渡航歴": true }

Slide 8

Slide 8 text

JSONのルール:その1 1. 「キー」と「値」で構成され、コロンで繋げます 2. 「キー」はダブルクオーテーションで囲みます 3. 「キー:値」はカーリーブラケットで囲みます { “名前”: “アメリカ合衆国” }

Slide 9

Slide 9 text

{ "名前": "アメリカ合衆国", "地区": "北アメリカ", “地理": { "首都": "ワシントンD.C.", "面積": 9834000, "人口": 331003000 }, "言語": [ "英語", "フランス語", "ハワイ語", "スペイン語" ], "渡航歴": true } JSONのルール:その2 4. 複数「キー:値」が並ぶときは、カンマで 区切ります 5. 「値」には以下の型が設定できます ① 文字列 ② 数字 ③ Boolean型(true/false) ④ オブジェクト ⑤ 配列 ⑥ null

Slide 10

Slide 10 text

練習➀ ➀首都の情報をJSONで記載してください ・首都 は ワシントンD.C. ② ➀に以下の情報を追加してください ・面積 は 9834000 ・人口 は 331003000 { “首都”: “ワシントンD.C.” } { "首都": "ワシントンD.C.", "面積": 9834000, "人口": 331003000 }

Slide 11

Slide 11 text

JSONのルール:オブジェクト JSONを複雑怪奇にする困ったヤツ、その1 • 「キー:値」はオブジェクト • 「キー」に対し、「キー:値」(オブジェクト)を「値」として設定できます • オブジェクトを入れ子にすると構造は階層化しますが、情報がグループ化され 意味づけがされます • データを取得する際は、[‘キー’]⇒[‘キー’] と階層をネストしながら指定します { "地理": { "首都": "ワシントンD.C.", "面積": 9834000, "人口": 331003000 } }

Slide 12

Slide 12 text

JSONのルール:配列 JSONを複雑怪奇にする困ったヤツ、その2 • 同一型の複数データを連続的に並べたデータ構造です • ブラケットで囲み、各アイテム(要素)はカンマで区切ります • データを取得する際は、添え字(何個目のデータ)を指定します • 各要素は、オブジェクトで指定することも可能です "言語": [ "英語", "フランス語", "ハワイ語", "スペイン語" ] "主要都市": [ {"名前": "ニューヨーク", "人口": 17799861}, {"名前": "ロサンゼルス", "人口": 11789487}, {"名前": "シカゴ", "人口": 8307904}, {"名前": "ホノルル", "人口": 718182} ]

Slide 13

Slide 13 text

JSONの階層化 { "名前": "アメリカ合衆国", "地区": "北アメリカ", "地理": { "首都": "ワシントンD.C.", "面積": 9834000, "人口": 331003000, "主要都市": [ {"名前": "ニューヨーク", "人口": 17799861}, {"名前": "ロサンゼルス", "人口": 11789487}, {"名前": "シカゴ", "人口": 8307904}, {"名前": "ホノルル", "人口": 718182} ] }, "言語": [ "英語", "フランス語", "ハワイ語", "スペイン語" ], "渡航歴": true } こんなJSONから、 Power Automate で 目的の「キー」に対する 値を取得する方法を説明 します

Slide 14

Slide 14 text

Power Automateで JSONが 怖くなくなると

Slide 15

Slide 15 text

Power AutomateでのJSON

Slide 16

Slide 16 text

Power AutomateでのJSON トリガーの Input と Output は JSON です

Slide 17

Slide 17 text

アクションの Input と Output も JSON です

Slide 18

Slide 18 text

どう活用できるの? 「動的なコンテンツ」で、目的の項目が取得しにくいとき triggerBody()?['events']?[0]?['message']?['type'] ダイレクトにコンテンツの指定が可能

Slide 19

Slide 19 text

実行速度が遅すぎる Apply to each を撲滅したいとき outputs('開始して承認を待機')?['body']?['responses']?[0]?['responder']?['email'] ダイレクトにコンテンツの指定が可能 承認者は一人なのに、 自動でApply to each になっちゃう お、遅い・・・

Slide 20

Slide 20 text

トリガーの実行条件を絞りたいとき トリガーの実行条件を 設定できます ■ 条件に合わない時はフローが実行しない為、実行回数の節約に効きます ■ SPOの「アイテムが作成または変更されたとき」の作成のみ条件とした い場合 ・・・など @equals(triggerBody()?['Created'],triggerBody()?['Modified'])

Slide 21

Slide 21 text

Adaptive Cards に変数を入れたいとき JSONの構造が分かると、 カスタマイズし放題です

Slide 22

Slide 22 text

Power Automateで JSONを扱う

Slide 23

Slide 23 text

ここで Automate の設定変更 設定 ⇒すべての Power Automate 設定を表示 試験的な機能 をオン

Slide 24

Slide 24 text

JSONを作る ■ 「データ操作」-「作成」 ■ 「変数を初期化する」 全体が { } で囲まれている ⇒ オブジェクト 全体が [ ] で囲まれている ⇒ アレイ

Slide 25

Slide 25 text

目的の値をゲット-JSONの解析 「データ操作」-「JSONの解析」でJSONから目的の項目が 取得できます JSONを貼付け 項目が参照できる

Slide 26

Slide 26 text

目的の値をゲット-アクション編 JSON Pretty Linter (https://lab.syncer.jp/Tool/JSON-Viewer/) ①実行履歴の未加工出力の表示を JSON Pretty Linter へ貼付けする

Slide 27

Slide 27 text

ビューアーで[Path]を有効化し、 目的の値のパスをクリック object['body']['responses'][0]['responder']['displayName'] ②Objectを outputs(‘Action名’)? に 置換する outputs('開始して承認を待機’)? ['body']?['responses']?[0]?['responder']?['displayName'] ③ブラケット間に”?”を挿入

Slide 28

Slide 28 text

trigger()?['body']?['body']?['content'] ③ブラケット間に”?”を挿入 目的の値をゲット-トリガー編 ①実行履歴の 未加工出力の表示を JSON Pretty Linter貼付けする ②Objectを trigger()? に置換する object['body']['body']['content']

Slide 29

Slide 29 text

variables('CountryInformation')?[0]?['名前'] object[0]['名前'] ②Objectを variables(‘変数名‘)? に置換する ③ブラケット間に”?”を挿入 目的の値をゲット-変数編 ①変数で入力した値をJSON Pretty Linter貼付けする

Slide 30

Slide 30 text

Power Automateで JSONの発展

Slide 31

Slide 31 text

Apply to each 対策 Apply to each は極力撲滅! ・・・遅い

Slide 32

Slide 32 text

Apply to each 対策① JSON配列の 全レコードから特定のカラム を取得する場合は 選択(と結合) [開始]に含まれるカラムは item()?[‘カラム名’] で取得できる

Slide 33

Slide 33 text

Apply to each 対策② JSON配列の 特定のレコードの特定のカラム を取得する場合は JSON Pretty Linter

Slide 34

Slide 34 text

「選択」アクションがあると・・・ Apply to Each なしで ■ 文字列を1文字ずつ配列に変換

Slide 35

Slide 35 text

「選択」アクションがあると・・・ Apply to Each なしで 文字列の指定の位置を変換

Slide 36

Slide 36 text

色々使うと オセロも作れます Power Virtual Agetns も利用してます

Slide 37

Slide 37 text

まとめ JSON怖くないでしょ? むしろ好きになっちゃった? 使いこなして面白フローをつくろう!

Slide 38

Slide 38 text

ありがとうございました