rksoftware

Visual Studio とか C# とかが好きです

Power Automate で JSON 文字列と認識されるパターン

Power Automate の文字列の値には特別な扱いがされるパターンがあります。それはなんでしょう?

そう JSON 文字列です。

今回はそこをちゃんと理解してみたいと思います。

■ JSON になるパターン

試してみて文字列が JSON として扱われるパターンは次の二つです。

  • { で始まり、ホワイトスペースでない文字 1 文字以上が挟まり } で終わる。ホワイトスペースでない文字が入っていればホワイトスペースも入っていても JSON。

  • { で始まり、前方の処理の出力が続く。

類似のいくつかのパターンもあるでしょうが、概ねこれらのパターンを覚えておけば突然のエラーでびっくりすることはないでしょう。

逆に JSON にならないパターン

  • { で始まり、ホワイトスペースでない文字が挟まらずに } で終わる。

  • 前方の処理の出力に続けて } で終わる。

■ JSON になるかどうかがなぜそんなに気になるの?

JSON とは JavaScript Object Notation (通称 ジェイソン) で、JavaScript のオブジェクトを文字列で表記するものです。そう、文字列なのです。
ということは、文字列を値として使いたいときは一部の文字をエスケープしなければなりません。そこらへんがどうなるのか気になるのは当然の結果です。

■ " は JSON ではエスケープされます

" という文字は JSON で値にする場合エスケープしなければなりません。そのあたりどうなるのでしょう?

まずは普通に文字列として使ってみます。" が含まれる出力を 作成 で作り 作成 2 で使ってみます。

はい。" がエスケープされずに普通に出てきました。そうですよね。こうでなければ困ります。

コード

この時のコードを確認してみましょう。Power Automate ではアクションがどんなコードになっているのか把握するのは必須です。これを把握しておかないと全く使いこなせません。
入力に文字列のが設定されその中に 作成 の出力の式が入っています。まあこうなりますよね。

{
    "inputs": "_\"@{outputs('作成')}\"_"
}

■ JSON だとどうなるでしょう?

では JSON だとどうなるでしょう?

こんな感じに組んで

エスケープされました。うれしい!

{
  "a": "a\"b"
}

コード

コードを確認してみます。
値が文字列でなく JSON になっています! なるほどフローの編集で JSON として認識されているとこういうコードになるんですね。納得。

{
    "inputs": {
        "a": "@{outputs('作成')}"
    }
}

■ 簡単ですね

Power Automate の JSON、完全に理解しました。