質問
[POST実行]コンポーネントのリクエストとして、以下のようなJSON形式のレスポンスが返ってきます。
{
"status": "error",
"code": "400",
"url": "<requested_url>",
"query": {
"limit": "three"
},
"errors": [
{
"code": "100",
"msg": "validation error",
"description": [
{
"name": "limit",
"value": "three",
"code": "2",
"msg": "TypeError"
}
]
}
],
"version": "1",
"accessTime": "2023-02-08 08:41:00 +0900"
}
このうち、「errors」の配列のみを抽出し、文字列としてスクリプト変数に代入したいのですが、実現可能でしょうか。
"errors": [{"code": "100","msg": "validation error","description": [{"name": "limit","value": "three","code": "2","msg": "TypeError"}]}]
回答
例として、正規表現を用いて任意の部分のみ抽出する実装を案内します。
■処理概要
取得したレスポンスデータから、[正規表現による置換]ロジックにて必要な部分のみを抽出する
■実装手順
- [POST実行]の「レスポンス設定」タブにて、「データ形式」に「その他のデータ形式」を指定します。
これによって、レスポンスを文字列として処理します。
- マッピングにて、[正規表現による置換]ロジックを2つ配置し、RESTコネクターのcontent要素から続けてマッピングし、結果を変数に代入します。
ひとつめの置換では改行(\n)とタブ(\t)を取り除き、二つ目の置換では「^.*("errors".*}\]}\]).*$」を「$1」に置換するように設定します。

■技術解説
2つ目の置換で行っている正規表現は、次のような条件を満たす文字列を探します。
- 文字列の最初から始まり、任意の文字列が続く。
- その中に `"errors"` という単語が含まれ、その後に任意の文字が続く。
- 最後に `}]}` という文字列が含まれ、任意の文字が続いた後に文字列の終わりが来る。
この際、"errors"で始まる文字列を( )で囲ってグループ化しておき、置換先として$1を指定することで、正規表現にマッチした部分のみを抽出することが可能です(グループキャプチャ)。
補足
レスポンスのステータスコードが400以上の場合、レスポンスボディのスキーマはレスポンスヘッダの「Content-Type」ヘッダに従って自動的に決定されます。
エラー時のレスポンスに対して上記実装を行う場合、コンポーネント変数の「error_response_body」からマッピングしてください。
コメント
0件のコメント
記事コメントは受け付けていません。