Power Automateで動的コンテンツにない値を自力で取得する方法
本記事でわかること
基本構文:body('アクション名')?['出力名']?['ネスト']
アクションで値が取得できているはずなのに、動的なコンテンツに出てこなくて利用できない。
そんなときは、自力で式を書くことで、ほとんどの値は取得できるようになります!
実行履歴(アクションの出力JSON)を見て、欲しい値がどのキーに入っているかを確認し、外側から順に掘っていけばOKです。
基本形は次のとおり。
body('アクション名')?['出力の名前1']?['出力の名前2']
解説:body('アクション名') がそのアクションの本文を指し、?['キー'] でそのキーを指定ながら階層を下がっていきます。
実行履歴のJSON(未加工の出力の表示)の見方・考え方
実行履歴で出力を開くと JSON が表示されます。ごちゃっとしていて少し怖いですが、基本は下記だけ押さえれば OK:
{ }はオブジェクト(キー: 値 の集合。複数列がある「行」に近い。)[ ]は配列(オブジェクトの集合のようなもの。「テーブル」に近い。)- キー名(列名のようなもの)をたどって値に到達するイメージ
body: {
"user": {
"profile": { "name": "Taro", "email": "taro@example.com" },
"roles": [{"Value" : "admin"},{"Value" : "editor"},{"Value" : "viewer"}]
}
}
上の例だと name を取りたい場合は:
body('アクション名')?['user']?['profile']?['name']
JSONオブジェクトの直感的な構成イメージ↓
テーブルの中に行があって、行の中に列があって...を繰り返すイメージです。
式の作り方:外枠から順に指定していく(手順)
- 実行履歴で対象のアクションを選択
- 左のペインから「未加工の出力を表示する>」を選択
- 右のペインから、欲しい値があるキーの位置を探す
- 外側のキーから順に ?['キー'] をつなげる。※配列なら [index] で指定したり、first()関数などで更に絞り込み。
- 編集画面に戻り、式エディタにコピーして動作確認 → 実行履歴で値を確認して微調整。
配列から取り出す例
body('アクション名')?['items']?[5]?['title'] // items 配列の6番目の要素の title ※番号は0始まり
または
first(body('アクション名')?['items'])?['title'] // items 配列の1番最初の要素の title
? の有無による違いと短縮表記
?['キー'] を使うと「キーが存在しない場合でもエラーにならず null を返す」安全なアクセスになります。
実運用では、外部 API や任意のアクションでキーが欠ける可能性があるので 安全側として ? を付けることを推奨します。
/* 安全アクセス */
body('アクション名')?['data']?['user']?['email']
/* 非安全アクセス(キーが無いと評価エラー) */
body('アクション名')['data']['user']['email']
また、ネストが深い場合はスラッシュで短く書けることがあります(エディタのサポート状況による)。
body('アクション名')?['data/user/email']
?['キー'] を一段ずつ追加していけば、式はほぼ確実に組めます。まずは安全アクセスで試してみてください。
実務で効く小技(Tips)
- Null チェック:coalesce() を使えば null をデフォルト値に置き換え可能。
coalesce(body('アクション名')?['user']?['name'], '名前不明') - 数値・日付の変換:int(), float(), toString(), formatDateTime() 等で型整形。
- 複雑な JSON は一度ペーストして整形:出力 JSON を外部の JSON ビューアに貼ってキーを探すと早いです。
- デバッグのコツ:式を一気に書かず、外側 → 中 → 内 の順で小さく動かして確認する(段階的デバッグ)。
まとめ
Power Automate の式は JSON を「外側から掘る」思考で組み立てれば直感的に書けます。
実行履歴を参照してキー名を特定し、body('アクション名')?['...'] を段階的に拡張していきましょう。エラーを怖れずに実行→確認を繰り返すのが上達の近道です。
相談やハンズオンで実務に即したサポートを行います。まずは気軽にご相談ください。