Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JSON攻略法.pdf

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 JSON攻略法.pdf

Avatar for MiyakeMito

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()など)で型を指定します