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、完全に理解しました。