Power Automat JSON

1. Parse JSON(JSON の解析)アクション

Power Automateにおいて、HTTPアクションなどで取得したデータは、システム上は単なる「長い文字列(テキスト)」として認識されています。

  • パース前: 巨大な1のかたまりの文字列。中身の「名前」や「日付」を個別に指定して取り出すことが難しい。
  • パース後: 構造化された「オブジェクト」。動的なコンテンツ(Dynamic Content)として、マウス操作で各項目を選択できるようになります。

例えるなら:

「中身が詰まった未開封のダンボール」がHTTPレスポンスです。Parse JSONは、そのダンボールを開封し、中身を整理された棚(変数)に並べ直す作業に相当します。


2. スキーマの自動生成

JSONには「どの項目が文字列で、どの項目が数値か」というルール(スキーマ)が必要です。これを手書きするのは非常に困難ですが、Power Automateには**「サンプルから生成」**という強力な機能があります。

手順

  1. APIを一度テスト実行し、出力された「本文(body)」をコピーする。
  2. 「JSON の解析」アクションの [サンプルから生成] ボタンをクリック。
  3. コピーしたJSONを貼り付けて [完了] を押す。

これだけで、複雑なJSON Schema(スキーマ)が自動的に書き込まれます。


3. null-safe 演算子 ?[]

これが実務において最も重要なテクニックといっても過言ではありません。

通常、JSONの特定の値を参照する際、そのキー(項目)が存在しないとフローは**「エラー」で強制終了**してしまいます。

エラーを防ぐ魔法の「?」

?[] を使うと、「もし項目がなかったらエラーにせず、単に空(null)として扱ってね」という命令になります。

書き方意味項目がない場合の結果
body('...')?['name']null-safe成功(結果は空になる)
body('...')['name']通常の参照失敗(フローが止まる)

外部APIは、データによって特定の項目が含まれない(省略される)ことがよくあります。「常に ?[] を書く」という習慣をつけるだけで、フローの安定性が劇的に向上します。


4. ネスト(階層)した JSON のたどり方

JSONは、箱の中にさらに箱が入っているような「入れ子構造」になっていることが多いです。この場合、外側の箱から順番に指定していきます。

階層をたどるイメージ

例えば、以下のような構造の場合:

{
  "data": {
    "items": [
      { "name": "商品A" }
    ]
  }
}
  • 式の書き方: body('Parse_JSON')?['data']?['items']?[0]?['name']
  • 解説:
    1. ?['data'] : dataというオブジェクトに入る
    2. ?['items'] : itemsというリスト(配列)に入る
    3. ?[0] : リストの**1番目(0番目)**の要素を指定
    4. ?['name'] : その中の name を取得

5. 結論:なぜこれが最強の武器なのか

現代のWebサービスの裏側では、ほぼ例外なくJSONという形式でデータのやり取りが行われています。

  • Microsoft Graph API(TeamsやOutlookの操作)
  • Salesforce / kintone などの外部ツール連携
  • 自社システムのAPI

これらを利用する際、「JSON の解析」でデータを展開し、「null-safe 演算子」でエラーを防ぐスキルさえあれば、どんなに複雑なデータが返ってきても、自由自在に情報を抽出・加工できるようになります。

Tips:

動的なコンテンツから項目を選んだ際、自動的に outputs('...')?['body/name'] のような式が生成されることがありますが、これも内部的には ?[] と同じ仕組みで動いています。複雑な条件分岐を作る際は、自分で式を書いて ?[] を使えるようになると、より高度な自動化が可能になります。

Power Automateで「値がnullならデフォルト値を代入する」という処理を行うには、null-safe演算子(?[])と合わせて、coalesce()(コアレス)関数を使うのが最もスマートで標準的な方法です。


1. coalesce() 関数の使い方

coalesce() は、与えられた引数を左から順番に評価し、**「最初に null ではない値」**を返します。

基本的な式

coalesce(判定する値, デフォルト値)

具体的な例(JSON解析の結果を使う場合)

たとえば、name という項目が null だった場合に「名無し」という文字列を入れたい場合は、以下のように記述します。

coalesce(body('JSON_の解析')?['name'], '名無し')

2. なぜ ?[] とセットで使うのか

coalesce の中で ?[] を使わないと、項目自体が存在しない場合に関数に到達する前にフローがエラーで止まってしまうからです。

  • ❌ NGな書き方:coalesce(body('...')['name'], 'デフォルト')
    • name キーが存在しないとエラーになる。
  • ✅ OKな書き方:coalesce(body('...')?['name'], 'デフォルト')
    • name キーがなくても null として扱われ、無事に第2引数の ‘デフォルト’ が採用される。

3. 「空文字(””)」と「null」の違いに注意

実務でよくハマるポイントが、**「キーはあるけど中身が空っぽ(””)」**というケースです。coalesce はあくまで null を判定するため、空文字は「値がある」とみなされてしまいます。

データの状態coalesce(値, ‘デフォルト’) の結果
null(値なし)‘デフォルト’
"A"(値あり)“A”
""(空文字)“” (デフォルト値にならない!)

空文字もデフォルト値に変えたい場合

空文字(empty)も判定に含めたい場合は、if 関数と empty 関数を組み合わせて使います。

if(empty(body('JSON_の解析')?['name']), 'デフォルト', body('JSON_の解析')?['name'])

意味: もし name が「空(null または “”)」なら ‘デフォルト’ を返し、そうでなければ name の値をそのまま返す。


4. 応用:複数の候補がある場合

coalesce は3つ以上の引数を持たせることも可能です。

coalesce(item()?['Nickname'], item()?['FirstName'], 'ゲスト様')
  1. ニックネームがあればそれを採用。
  2. なければ、ファーストネームを採用。
  3. どちらも null なら「ゲスト様」を採用。

このように、優先順位をつけて値を決定する際に非常に便利です。


まとめ

  • 基本は coalesce(値?['キー'], 'デフォルト') を使う。
  • 必ず ?[] を含めて書く(エラー防止のため)。
  • 空文字 "" を回避したい場合のみ if(empty(...)) を使う。

このセットを覚えておけば、API連携でデータが不安定な場合でも、エラー知らずのタフなフローが作成できます。

コメント

タイトルとURLをコピーしました