Power AutomateでJsonの解析をした際などに、特定の1つの値だけ抽出したいケースがありました。
備忘録的に記事にまとめます。
多すぎる項目から必要な分だけにする
例えばこんなjsonがあります。
[
{ "name": "テスト 太郎", "sex": "男", "age": 45, "Department": "総務", "YearsOfService": 7
},
{ "name": "テスト 花子", "sex": "女", "age": 45, "Department": "総務", "YearsOfService": 6
}
]
これぐらいの量であれば、加工せずにそのまま使っても良いかもしれません。しかし、そのまま使うと下画像のように大量の選択肢から選ぶことになり、よく分からなくなる場合もあります。
先程のJsonではありませんが、Youtubeからデータを取得した際の全ての項目をそのまま使おうとするとこのようになります。これではとても不便ですし、idやurlなどが何度も登場し、どのIdなのかこの選択肢だけでは見分けが付きません。
非常にミスなどを起こしやすいため、まずは使う範囲だけ取得しておくことが有効なケースが多々あります。
使う範囲だけ取得し、Jsonの形を保ったままにしたい場合は、選択アクションを使うのが良さそうです。
最初のJsonから、nameとDepartmentだけを使いたいという場合で考えてみます。
ついでに項目名の部分を日本語に書き換えたりすることで、分かりやすくすることができます。
実行結果はこのようになります。
{ "名前": "テスト 太郎", "所属": "総務" }, { "名前": "テスト 花子", "所属": "総務" }
]
特定の1つの値だけを抽出したい
データの中身の確認の為や、色々なケースで特定の1つの値だけを取得したいことがあります。
例えばこんなYoutube Data APIで取得できるJsonから、1つ目のid(太字の部分)を取得したいとします。
{
"items": [ { "kind": "youtube#channel", "etag": "nqL08vrjk7bTVUHMifCelQE370U", "id": "UCZf__ehlCEBPop-_sldpBUQ", "snippet": { "title": "HikakinTV", "description": "登録ありがとうございます。\n◆プロフィール◆\nYouTubeにてHIKAKIN、HikakinTV、HikakinGames、HikakinBlogと\n4つのチャンネルを運営し、動画の総アクセス数は180億回を突破、\nチャンネル登録者数は計2000万人以上、YouTubeタレント事務所uuum株式会社ファウンダー兼最高顧問。", "customUrl": "hikakintv", "publishedAt": "2011-07-19T11:31:43Z", "thumbnails": { "default": { "url": "https://yt3.ggpht.com/ytc/APkrFKa2X9oS3Z08OTPavY2Xapfg-iBjCoNF4G2XD2JV8w=s88-c-k-c0x00ffffff-no-rj", "width": 88, "height": 88 }, "medium": { "url": "https://yt3.ggpht.com/ytc/APkrFKa2X9oS3Z08OTPavY2Xapfg-iBjCoNF4G2XD2JV8w=s240-c-k-c0x00ffffff-no-rj", "width": 240, "height": 240 }, "high": { "url": "https://yt3.ggpht.com/ytc/APkrFKa2X9oS3Z08OTPavY2Xapfg-iBjCoNF4G2XD2JV8w=s800-c-k-c0x00ffffff-no-rj", "width": 800, "height": 800 } }, "localized": { "title": "HikakinTV", "description": "登録ありがとうございます。\n◆プロフィール◆\nYouTubeにてHIKAKIN、HikakinTV、HikakinGames、HikakinBlogと\n4つのチャンネルを運営し、動画の総アクセス数は180億回を突破、\nチャンネル登録者数は計2000万人以上、YouTubeタレント事務所uuum株式会社ファウンダー兼最高顧問。" } } }, { "kind": "youtube#channel", "etag": "4KZmNQqUJThTQ6SyaQ4tZ6XCg_U", "id": "UCg4nOl7_gtStrLwF0_xoV0A", "snippet": { "title": "SeikinTV", "description": "SEIKIN(セイキン)\n動画クリエイター / シンガーソングライター\nジャンルにとらわれない幅広い内容の動画を数多く配信しているクリエイター。\nまた、実の兄弟音楽ユニット「HIKAKIN & SEIKIN」のヴォーカル兼、作詞作曲を自ら手掛けており、地上波の音楽番組にも出演している。", "customUrl": "seikintv", "publishedAt": "2012-01-29T16:53:15Z", "thumbnails": { "default": { "url": "https://yt3.ggpht.com/ytc/APkrFKa9HSX3X1qR1ieZdY5YKXcQVZB6Zf5UrK-9WA8TQA=s88-c-k-c0x00ffffff-no-rj", "width": 88, "height": 88 }, "medium": { "url": "https://yt3.ggpht.com/ytc/APkrFKa9HSX3X1qR1ieZdY5YKXcQVZB6Zf5UrK-9WA8TQA=s240-c-k-c0x00ffffff-no-rj", "width": 240, "height": 240 }, "high": { "url": "https://yt3.ggpht.com/ytc/APkrFKa9HSX3X1qR1ieZdY5YKXcQVZB6Zf5UrK-9WA8TQA=s800-c-k-c0x00ffffff-no-rj", "width": 800, "height": 800 } }, "localized": { "title": "SeikinTV", "description": "SEIKIN(セイキン)\n動画クリエイター / シンガーソングライター\nジャンルにとらわれない幅広い内容の動画を数多く配信しているクリエイター。\nまた、実の兄弟音楽ユニット「HIKAKIN & SEIKIN」のヴォーカル兼、作詞作曲を自ら手掛けており、地上波の音楽番組にも出演している。" }, "country": "JP" } } ]
}
jsonから1つだけの値を取得するには、アクションの実行結果を取得できる「outputs関数」を利用して取得します。
ここからは段階にして少しずつ解説
「outputs(‘JSON_の解析’)」では出力結果のステータスコードなども含まれます。実行結果のデータのみ取得する場合は、「outputs(‘JSON_の解析’)?[‘body’]」のように指定します。
outputs('JSON_の解析')?['body']
{ "items": [ { "kind": "youtube#channel", "etag": "nqL08vrjk7bTVUHMifCelQE370U", "id": "UCZf__ehlCEBPop-_sldpBUQ", "snippet": { "title": "HikakinTV", "description": "登録ありがとうございます。\n◆プロフィール◆\nYouTubeにてHIKAKIN、HikakinTV、HikakinGames、HikakinBlogと\n4つのチャンネルを運営し、動画の総アクセス数は180億回を突破、\nチャンネル登録者数は計2000万人以上、YouTubeタレント事務所uuum株式会社ファウンダー兼最高顧問。", "customUrl": "hikakintv", "publishedAt": "2011-07-19T11:31:43Z", "thumbnails": { "default": { "url": "https://yt3.ggpht.com/ytc/APkrFKa2X9oS3Z08OTPavY2Xapfg-iBjCoNF4G2XD2JV8w=s88-c-k-c0x00ffffff-no-rj", "width": 88, "height": 88 }, "medium": { "url": "https://yt3.ggpht.com/ytc/APkrFKa2X9oS3Z08OTPavY2Xapfg-iBjCoNF4G2XD2JV8w=s240-c-k-c0x00ffffff-no-rj", "width": 240, "height": 240 }, "high": { "url": "https://yt3.ggpht.com/ytc/APkrFKa2X9oS3Z08OTPavY2Xapfg-iBjCoNF4G2XD2JV8w=s800-c-k-c0x00ffffff-no-rj", "width": 800, "height": 800 } }, "localized": { "title": "HikakinTV", "description": "登録ありがとうございます。\n◆プロフィール◆\nYouTubeにてHIKAKIN、HikakinTV、HikakinGames、HikakinBlogと\n4つのチャンネルを運営し、動画の総アクセス数は180億回を突破、\nチャンネル登録者数は計2000万人以上、YouTubeタレント事務所uuum株式会社ファウンダー兼最高顧問。" } } }, { "kind": "youtube#channel", "etag": "4KZmNQqUJThTQ6SyaQ4tZ6XCg_U", "id": "UCg4nOl7_gtStrLwF0_xoV0A", "snippet": { "title": "SeikinTV", "description": "SEIKIN(セイキン)\n動画クリエイター / シンガーソングライター\nジャンルにとらわれない幅広い内容の動画を数多く配信しているクリエイター。\nまた、実の兄弟音楽ユニット「HIKAKIN & SEIKIN」のヴォーカル兼、作詞作曲を自ら手掛けており、地上波の音楽番組にも出演している。", "customUrl": "seikintv", "publishedAt": "2012-01-29T16:53:15Z", "thumbnails": { "default": { "url": "https://yt3.ggpht.com/ytc/APkrFKa9HSX3X1qR1ieZdY5YKXcQVZB6Zf5UrK-9WA8TQA=s88-c-k-c0x00ffffff-no-rj", "width": 88, "height": 88 }, "medium": { "url": "https://yt3.ggpht.com/ytc/APkrFKa9HSX3X1qR1ieZdY5YKXcQVZB6Zf5UrK-9WA8TQA=s240-c-k-c0x00ffffff-no-rj", "width": 240, "height": 240 }, "high": { "url": "https://yt3.ggpht.com/ytc/APkrFKa9HSX3X1qR1ieZdY5YKXcQVZB6Zf5UrK-9WA8TQA=s800-c-k-c0x00ffffff-no-rj", "width": 800, "height": 800 } }, "localized": { "title": "SeikinTV", "description": "SEIKIN(セイキン)\n動画クリエイター / シンガーソングライター\nジャンルにとらわれない幅広い内容の動画を数多く配信しているクリエイター。\nまた、実の兄弟音楽ユニット「HIKAKIN & SEIKIN」のヴォーカル兼、作詞作曲を自ら手掛けており、地上波の音楽番組にも出演している。" }, "country": "JP" } } ]
}
さてここからパラメーターを設定していくのですが、キーとなる値を「?」で繋ぎ設定していきます。
outputs('JSON_の解析')?['body']?['items']
[ { "kind": "youtube#channel", "etag": "nqL08vrjk7bTVUHMifCelQE370U", "id": "UCZf__ehlCEBPop-_sldpBUQ", "snippet": { "title": "HikakinTV", "description": "登録ありがとうございます。\n◆プロフィール◆\nYouTubeにてHIKAKIN、HikakinTV、HikakinGames、HikakinBlogと\n4つのチャンネルを運営し、動画の総アクセス数は180億回を突破、\nチャンネル登録者数は計2000万人以上、YouTubeタレント事務所uuum株式会社ファウンダー兼最高顧問。", "customUrl": "hikakintv", "publishedAt": "2011-07-19T11:31:43Z", "thumbnails": { "default": { "url": "https://yt3.ggpht.com/ytc/APkrFKa2X9oS3Z08OTPavY2Xapfg-iBjCoNF4G2XD2JV8w=s88-c-k-c0x00ffffff-no-rj", "width": 88, "height": 88 }, "medium": { "url": "https://yt3.ggpht.com/ytc/APkrFKa2X9oS3Z08OTPavY2Xapfg-iBjCoNF4G2XD2JV8w=s240-c-k-c0x00ffffff-no-rj", "width": 240, "height": 240 }, "high": { "url": "https://yt3.ggpht.com/ytc/APkrFKa2X9oS3Z08OTPavY2Xapfg-iBjCoNF4G2XD2JV8w=s800-c-k-c0x00ffffff-no-rj", "width": 800, "height": 800 } }, "localized": { "title": "HikakinTV", "description": "登録ありがとうございます。\n◆プロフィール◆\nYouTubeにてHIKAKIN、HikakinTV、HikakinGames、HikakinBlogと\n4つのチャンネルを運営し、動画の総アクセス数は180億回を突破、\nチャンネル登録者数は計2000万人以上、YouTubeタレント事務所uuum株式会社ファウンダー兼最高顧問。" } } }, { "kind": "youtube#channel", "etag": "4KZmNQqUJThTQ6SyaQ4tZ6XCg_U", "id": "UCg4nOl7_gtStrLwF0_xoV0A", "snippet": { "title": "SeikinTV", "description": "SEIKIN(セイキン)\n動画クリエイター / シンガーソングライター\nジャンルにとらわれない幅広い内容の動画を数多く配信しているクリエイター。\nまた、実の兄弟音楽ユニット「HIKAKIN & SEIKIN」のヴォーカル兼、作詞作曲を自ら手掛けており、地上波の音楽番組にも出演している。", "customUrl": "seikintv", "publishedAt": "2012-01-29T16:53:15Z", "thumbnails": { "default": { "url": "https://yt3.ggpht.com/ytc/APkrFKa9HSX3X1qR1ieZdY5YKXcQVZB6Zf5UrK-9WA8TQA=s88-c-k-c0x00ffffff-no-rj", "width": 88, "height": 88 }, "medium": { "url": "https://yt3.ggpht.com/ytc/APkrFKa9HSX3X1qR1ieZdY5YKXcQVZB6Zf5UrK-9WA8TQA=s240-c-k-c0x00ffffff-no-rj", "width": 240, "height": 240 }, "high": { "url": "https://yt3.ggpht.com/ytc/APkrFKa9HSX3X1qR1ieZdY5YKXcQVZB6Zf5UrK-9WA8TQA=s800-c-k-c0x00ffffff-no-rj", "width": 800, "height": 800 } }, "localized": { "title": "SeikinTV", "description": "SEIKIN(セイキン)\n動画クリエイター / シンガーソングライター\nジャンルにとらわれない幅広い内容の動画を数多く配信しているクリエイター。\nまた、実の兄弟音楽ユニット「HIKAKIN & SEIKIN」のヴォーカル兼、作詞作曲を自ら手掛けており、地上波の音楽番組にも出演している。" }, "country": "JP" } }
]
「items」というパラメーターはアレイ型([]で配下を囲んでいる)ので、◯番目という指定の方法になります。Power Automate では0(ゼロ)から指定していく形になります。今回は1つ目のidを取得したいので[0]を指定します。
outputs('JSON_の解析')?['body']['items']?[0]
{ "kind": "youtube#channel", "etag": "nqL08vrjk7bTVUHMifCelQE370U", "id": "UCZf__ehlCEBPop-_sldpBUQ", "snippet": { "title": "HikakinTV", "description": "登録ありがとうございます。\n◆プロフィール◆\nYouTubeにてHIKAKIN、HikakinTV、HikakinGames、HikakinBlogと\n4つのチャンネルを運営し、動画の総アクセス数は180億回を突破、\nチャンネル登録者数は計2000万人以上、YouTubeタレント事務所uuum株式会社ファウンダー兼最高顧問。", "customUrl": "hikakintv", "publishedAt": "2011-07-19T11:31:43Z", "thumbnails": { "default": { "url": "https://yt3.ggpht.com/ytc/APkrFKa2X9oS3Z08OTPavY2Xapfg-iBjCoNF4G2XD2JV8w=s88-c-k-c0x00ffffff-no-rj", "width": 88, "height": 88 }, "medium": { "url": "https://yt3.ggpht.com/ytc/APkrFKa2X9oS3Z08OTPavY2Xapfg-iBjCoNF4G2XD2JV8w=s240-c-k-c0x00ffffff-no-rj", "width": 240, "height": 240 }, "high": { "url": "https://yt3.ggpht.com/ytc/APkrFKa2X9oS3Z08OTPavY2Xapfg-iBjCoNF4G2XD2JV8w=s800-c-k-c0x00ffffff-no-rj", "width": 800, "height": 800 } }, "localized": { "title": "HikakinTV", "description": "登録ありがとうございます。\n◆プロフィール◆\nYouTubeにてHIKAKIN、HikakinTV、HikakinGames、HikakinBlogと\n4つのチャンネルを運営し、動画の総アクセス数は180億回を突破、\nチャンネル登録者数は計2000万人以上、YouTubeタレント事務所uuum株式会社ファウンダー兼最高顧問。" } }
}
ここまでくればあとはidを指定するだけです。
outputs('JSON_の解析')?['body']['items']?[0]?['id']
UCZf__ehlCEBPop-_sldpBUQ
ちなみにtitleやdescriptionはsnippetの配下にあるので、このように指定することで取得できます。
//titleを取得
outputs('JSON_の解析')?['body']['items']?[0]?['snippet']?['title']
//descriptionを取得
outputs('JSON_の解析')?['body']['items']?[0]?['snippet']?['description']
パラメーターの書き方
実は「outputs(‘JSON_の解析’)?[‘body’]?[‘items’]、、、」というような「?」で値を繋ぐように書いていましたが別の書き方もできます。
書き方 | 例 | 参考 |
---|---|---|
間は「?」 | outputs(‘JSON_の解析’)?[‘body’]?[‘items’] | ◎ |
スラッシュで繋げてまとめる | outputs(‘JSON_の解析’)[‘body/items’] | ◎ |
間は「.(ドット)」 | outputs(‘JSON_の解析’).body.items | △ |
間は無し | outputs(‘JSON_の解析’)[‘body’][‘items’] | △ |
Hiroさんという方がこちらの記事で細かく検証されていますが、nullなどが取得できたりできなかったりすることがあり、基本的に「outputs(‘JSON_の解析’)?[‘body’]?[‘items’]」のような形で書くことを覚えておけば良さそうです。