Power Automateで、次のように階層が深く、同じキーがたくさんあるJSONを処理したいとします。※サンプルはコラボフローのWebhookで送信されるJSONを簡略化したもの。
{
"contents": {
"fidCustomerCode": {
"label": "01",
"value": "01",
"type": "text"
},
"fidCustomerName": {
"label": "コラボ建設株式会社",
"value": "コラボ建設株式会社",
"type": "text"
},
},
"request_date": "2020-07-25T14:22:51Z",
"document_id": 1,
}
よしっ!とこれを「JSONの解析」にかけると、こんな感じで同じ変数が大量にできてしまいます。
使いづらい!てゆうかわからん。
そんな時は、triggerBody()を使って自力でJSONの階層を指定します。
triggerBodyは実行時のトリガーの出力(他システムからWebhookで送信されたデータを「HTTP要求の受信時」で受け取ったとすると、Webhookから送信されたJSON)を返すので、triggerBody()に続けてJSONの階層を指定します。
triggerBody()?['contents']?['fidCustomerName']?['value']
※JSONにキーが存在しない場合のエラー回避のため、?
演算子を使ってNULLを返すようにしています。キーが無い場合にアクションをエラーにしたい場合は?
演算子を使わずにキーを指定します。
実際にフローの設計画面でセットする際は、下記のように「動的なコンテンツの追加」から「式」パネルを選択してtriggerBody()に続くJSON階層を指定します。
これで最初のサンプル内にある「contents.fidCustomerName.value」の値「コラボ建設株式会社」を取得する事ができます。
ちなみに式パネルでtriggerBody()をセットした後の画面ではこんな感じで関数「triggerBody()」が表示されますが・・
フローを保存した後再度開くと、このように表記が変わります。
これは表記が変わっただけで、特に動作への影響は無いようです。
当方、Power Automate初心者なので、もっといい方法があるのを知らないだけかもしれません。もしいい方法があればどなたか教えてくださると喜びます。