Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

JSON攻略法.pdf

 JSON攻略法.pdf

MiyakeMito

April 20, 2024
Tweet

More Decks by MiyakeMito

Other Decks in Technology

Transcript

  1. 本日の参考サイト 5 ▪ Hiroさん JSONと仲良くなるために (まとめ) https://mofumofupower.hatenablog.com/entry/2020/09/04/190039 Power Automate で

    JSONの値を取得する 3 (+1) の方法 https://mofumofupower.hatenablog.com/entry/json_value Convert JSON data in Power Apps without Premium license https://mofumofupower.hatenablog.com/entry/2022/09/07/201957 ▪ コルネさん Power AppsでJSONがパースできるようになりました!(Preview) https://koruneko.hatenablog.com/entry/2022/09/07/195521
  2. JSONとは { "名前": "アメリカ合衆国", "地区": "北アメリカ", "地理": { "首都": "ワシントンD.C.",

    "面積": 9834000, "人口": 331003000, "主要都市": [ {"名前": "ニューヨーク", "人口": 17799861}, {"名前": "ロサンゼルス", "人口": 11789487}, {"名前": "シカゴ", "人口": 8307904}, {"名前": "ホノルル", "人口": 718182} ] }, "言語": [ "英語", "フランス語", "ハワイ語", "スペイン語" ], "渡航歴": true } 15 ◼ 「JavaScript Object Notation」の 略称で、JavaScript オブジェクト表 記法によるデータ記述形式 ✓ テキストベースで軽量なデータ ✓ 人間にとってわかりやすい構造 ✓ 記載ルールが決まっているためコン ピュータも読み書きしやすい ✓ 様々なプログラム言語で利用できる ✓ REST APIで扱われることの多い形式
  3. 名前,地区,首都,面積,人口 アメリカ合衆国,北アメリカ,ワシントンD.C.,9834000 イタリア共和国,ヨーロッパ,ローマ,302780,60462000 日本,アジア,東京都,377973,1261406099 16 CSV <国> <名前>アメリカ合衆国</名前> <地区>北アメリカ</地区> <地理>

    <首都>ワシントンD.C.</首都> <面積>9834000</面積> <人口>331003000</人口> </地理> </国> XML { "名前": "アメリカ合衆国", "地区": "北アメリカ", "地理": { "首都": "ワシントンD.C.", "面積": 9834000, "人口": 331003000 } } JSON JSON は ✓見やすく ✓軽く ✓書きやすく ✓加工しやすい のです 他のテキストフォーマットデータと比較
  4. { "名前": "アメリカ合衆国", "地区": "北アメリカ", “地理": { "首都": "ワシントンD.C.", "面積":

    9834000, "人口": 331003000 }, "言語": [ "英語", "フランス語", "ハワイ語", "スペイン語" ], "渡航歴": true } JSONのルール:その2 4. 複数「キー:値」が並ぶときは、カン マで区切ります 5. 「値」には以下の型が設定できます ① 文字列 ② 数字 ③ Boolean型(true/false) ④ オブジェクト ⑤ 配列 ⑥ null 今のところ null は 限られた状況において、 [JSONの解析]アクションで エラーになります 18
  5. JSONのルール:オブジェクト ➢ 「キー:値」はオブジェクト ➢ 「キー」に対し「キー:値」(オブ ジェクト)を「値」として設定できる ➢ オブジェクトを入れ子にすると構造は 階層化しますが、情報がグループ化さ れ意味付けがされます

    ➢ データを取得する際は、 [‘上位キー’]⇒[‘下位キー’] と階層を ネストしながら指定します { "地理": { "首都": "ワシントンD.C.", "面積": 9834000, "人口": 331003000 } } 20 JSONを階層化し、 複雑にする要因 その1
  6. JSONのルール:配列 ➢ ブラケットで囲み、各アイテム(要素)はカンマで区切ります ➢ データを取得する際は、添え字(何個目のデータ)を指定します ➢ Power Automateでは添え字を0から、Power Appsでは1から数えます ➢

    各要素は、オブジェクトで指定することも可能です ➢ 文字列も複数文字の連続(=配列)として解釈できます {"言語": [ "英語", "フランス語", "ハワイ語", "スペイン語" ]} {"主要都市": [ {"名前": "ニューヨーク", "人口": 17799861}, {"名前": "ロサンゼルス", "人口": 11789487}, {"名前": "シカゴ", "人口": 8307904}, {"名前": "ホノルル", "人口": 718182} ]} 21 JSONを階層化し、 複雑にする要因 その2
  7. JSONの階層化 こんなJSONから、 Power Automate と Power Apps で 目的の「キー」に対 する値を取得する方

    法を説明します 23 { "名前": "アメリカ合衆国", "地区": "北アメリカ", "地理": { "首都": "ワシントンD.C.", "面積": 9834000, "人口": 331003000, "主要都市": [ {"名前": "ニューヨーク", "人口": 17799861}, {"名前": "ロサンゼルス", "人口": 11789487}, {"名前": "シカゴ", "人口": 8307904}, {"名前": "ホノルル", "人口": 718182} ] } } シカゴの人口は??
  8. Power Automate での JSON ▪ JSON の作成 ➢ 変数等にJSON を入力する

    ➢ json()などの関数 ▪ JSON を参照する ➢ 「JSONの解析」アクションで、動的にコンテンツが取得できる ➢ JSON から、ダイレクトにコンテンツが取得できる 26
  9. JSON を作る ② ▪ 「変数を初期化する」 全体が { } で囲まれている ⇒

    オブジェクト 全体が [ ] で囲まれている ⇒ アレイ 28 variables('JSONObject')?['地理']?['首都'] variables('JSONObject')?[0]?['地理']?['首都']
  10. JSON を作る ③ ▪ 関数 29 array() createArray() ➢ 配列を作る

    range() ➢ JSON を更新する addProperty() setProperty() removeProperty() json() json(concat(…))
  11. trigger()?['body']?['body']?['content'] ③ ブラケット間に”?”を挿入 目的の値を取得 - トリガーから ① 実行履歴の 未加工出力の表示を JSON

    Pretty Linter貼付けする ② 「Object」を「trigger('Trigger名')?」に 置換する object['body']['body']['content'] 33 オプション
  12. 配列を参照する ① ▪ 配列から要素を一つだけ取り出す outputs('アクション名')?[0] ➢ 添え字で指定する 添え字を指定するときは 「 '

    ' 」(シングルクオーテーション)で囲まない 35 first() ➢ 最初の要素を取得する last() ➢ 最後の要素を取得する
  13. 配列を参照する ② ▪ 配列から複数の要素を取り出す ➢ Apply to each 36 ➢

    関数 skip() take() intersection() union() …など item() でも可 split() ➢ [データ操作]コネクタ
  14. Apply to each 回避方法 37 “operationDefinition”: { “type”: “Foreach”, “foreach”:

    "@outputs('ファイルの取得_(プロパティのみ)')?['body/value']", "actions": { outputs(‘ファイルの取得_(プロパティのみ)’)?[‘body/value’] ?[0] ?['{Link}’] “foreach”: の値 最初の1件目の場合は [0]
  15. 目的の値を取得 38 { "名前": "アメリカ合衆国", "地区": "北アメリカ", "地理": { "首都":

    "ワシントンD.C.", "面積": 9834000, "人口": 331003000, "主要都市": [ {"名前": "ニューヨーク", "人口": 17799861}, {"名前": "ロサンゼルス", "人口": 11789487}, {"名前": "シカゴ", "人口": 8307904}, {"名前": "ホノルル", "人口": 718182} ] outputs('Action名') or trigger('Trigger名') or variables('変数名') ?['地理'] ?['主要都市'] ?[2] outputs('Action名')?['地理']?['主要都市']?[2]?['人口'] ?['人口'] 階層のつなぎとなる"?"は、 "."(ドット)や"/"(スラッシュ)や 無しでも記載できますが、動作が変 わります。詳しくは https://mofumofupower.hatenablog.co m/entry/json_value ➢ シカゴの 人口は?
  16. Power Apps での JSON ▪ JSON の作成 ➢ JSON() 関数で、Collection

    や 変数(レコード型、テーブル型)を JSON(テキスト型) に変換できる ▪ JSON を参照する ➢ Power Automate で 解析する ➢ JSON を ParseJSON() 関数で解析 ➢ IsMatch(),MatchAll()と正規表現で解析する方法もある ➢ コネクタの応答 は Collection(TableやRecord)で扱える 40
  17. 41 JSON (テキスト型) collection (コレクション変数) Table型 (コレクション型) JSON関数 Power Automate

    を呼び出 して「応答」 +Collect関数など Collect関数など Set関数 UpdateContext関数 Launch関数 Power Automate を呼び出して 「応答」 +Set関数など JSON関数 構造化データ型の変換 {首都 : "ワシントンD.C."} {"首都": "ワシントンD.C."}
  18. Power Apps で JSON を作成 ▪ JSON() 関数 – Collection

    や 変数(テーブル、 レコード)を JSON に変換できる Set( txtJSON, JSON( colJSON )) ClearCollect( colJSON, { 国: "アメリカ合衆国", 地理: { 首都: "ワシントンD.C.", 面積: 9834000, 人口: 331003000 } }, { 国: "イタリア共和国", 地理: { 首都: "ローマ", 面積: 302780, 人口: 60462000 } } ); [{"国":"アメリカ合衆国","地理":{"人口":331003000,"面積 ":9834000,"首都":"ワシントンD.C."}},{"国":"イタリア共和国"," 地理":{"人口":60462000,"面積":302780,"首都":"ローマ"}}] Power Automate へ、データ構造を維持しながら パラメータを渡すことができます 42 キー を”” (ダブルクオーテー ション)で囲まない JSONっぽい構造
  19. JSON関数の動き ➢ 配列 ➢ レコード [ "値1", "値2", "値3" ]

    JSON() 関数の結果 { 列1:"値1", 列2:"値2", 列3:"値3" } 1つまたは複数の「キー:値」で構成 ➢ テーブル { 列1:"値1", 列2:"値2", 列3:"値3" }, { 列1:"値4", 列2:"値5", 列3:"値6" } 複数のレコードで構成 43 [ { "Value": "値1" }, { "Value": "値2" }, { "Value": "値3" } ] [ { "列1": "値1", "列2": "値2", "列3": "値3" } ] [ { "列1": "値1", "列2": "値2", "列3": "値3" }, { "列1": "値4", "列2": "値5", "列3": "値6" }, ] 値のみの配列 暗黙的に、"Value"というキーが付与される JSON() JSON() JSON() { "列1": "値1", "列2": "値2", "列3": "値3" } コレクションから 変数から
  20. 配列を操作/参照する ▪ コレクションや変数に格納する ➢ 配列 ➢ レコード ClearCollect(col, [ "値1",

    "値2", "値3" ]) 暗黙的に"Value"というカラムが 付与されたテーブル型になる 44 ClearCollect(col, { 列1:"値1", 列2:"値2", 列3:"値3" }, { 列1:"値4", 列2:"値5", 列3:"値6" }) Set(tbl, Table({ 列1:"値1", 列2:"値2", 列3:"値3" }, { 列1:"値4", 列2:"値5", 列3:"値6" })) Set(tbl, [ "値1", "値2", "値3" ]) ClearCollect(col, { 列1:"値1", 列2:"値2", 列3:"値3" }) Set(Rec, { 列1:"値1", 列2:"値2", 列3:"値3" }) ➢ テーブル { "列1": "値1", "列2": "値2", "列3": "値3" } [ { "列1": "値1", "列2": "値2", "列3": "値3" } ] JSON() JSON() Value 値1 値2 値3 列1 列2 列3 値1 値2 値3 名前 値 列1 値1 列2 値2 列3 値3 列1 列2 列3 値1 値2 値3 値4 値5 値6 引数がレコードの場合は、Record型に格納される
  21. コレクションを操作/参照する ▪ コレクションのレコードを編集 – Patch(),Update(),UpdateIf() ▪ コレクションのレコードを削除 – Remove(),RemoveIf() ▪

    コレクションの値を参照 – Filter(),Search() ,LookUp(),Index() ,First() などで、 行(レコード)を特定し、[.列(カラム)]で列を指定 ▪ コレクションにレコードを追加 – Patch() ,Collect() Index(col, 2).列2 Lookup(col, 列1="値1").列2 ForAll() を組み合わせると さらに複雑な操作が可能です これらの関数による レコードの追加、編集、削除は コレクションにのみ可能です (変数には不可) 45 Power AppsでもJSONと仲良くなるために https://qiita.com/MiyakeMito/items/ffcc7639b2813dee77ca
  22. ▪ Power Automate から「要求」コネクタ-「応答」 – 複雑なJSONのデータを解析済みで扱える [応答]アクションは プレミアムコネクタです [ {

    "名前": "アメリカ合衆国", "地区": "北アメリカ", "地理": { "首都": "ワシントンD.C.", "面積": 9834000, "人口": 331003000, "主要都市": [ { "名前": "ニューヨーク", "人口": 17799861 }, { "名前": "ロサンゼルス", "人口": 11789487 }, { "名前": "シカゴ", "人口": 8307904 }, { "名前": "ホノルル", "人口": 718182 } ] Power Apps で JSONを解析 46 JSONペイロードを 張り付け Power Apps には ➢ オブジェクト: レコード型 ➢ 配列: テーブル型 で返ります Collect(col, Flow.Run()); Set(rec, Flow.Run()); Set(tbl, Flow.Run());
  23. Power Apps で JSON を解析 ▪ ParseJSON() 関数 – JSON(テキスト)をパースし、目的の値が取得可能

    Text(First(Table(ParseJSON( txtJSON ))).Value.首都) [ { "人口": 331003000, "面積": 9834000, "首都": "ワシントンD.C." } ] ワシントンD.C. 47 Text(ParseJSON( txtJSON ).首都) { "人口": 331003000, "面積": 9834000, "首都": "ワシントンD.C." }
  24. ParseJSON() 関数の仕様 Text(First(Table(ParseJSON( txtJSON ))).Value.首都) [ { "人口": 331003000, "面積":

    9834000, "首都": "ワシントンD.C." } ] 48 Text(ParseJSON( txtJSON ).首都) { "人口": 331003000, "面積": 9834000, "首都": "ワシントンD.C." } Inputは文字列です ① 配列はTable()で型指定します ② First(),Index()などで行を指定します ③ ".Value"(カラム)を指定します ④ キーを指定します 型指定されていないオブジェクトを返すので、 型変換関数(Text(),Value(),Table()など)で型を指定します