# HTTPクライアントを使ったデータの抽出方法に関する追加情報

レスポンス全体のペイロードではなく、レスポンスボディの特定の部分を返すようにHTTPクライアントコネクターを設定したい場合は、[Extract a sub-part of the response] (レスポンスのサブ部分を抽出)パラメーターと[Output key/value pair] (出力キー/値のペア)パラメーターを使用します。

次の例は、ユーザーの年齢、住所、所有自動車といったレコードが含まれているこのJSONファイルに基づいています。

```
[
  {
    "name": "Peter",
    "age": 40,
    "male": true,
    "addresses": {
       "city": "Nantes",
       "zip": "44000",
       "street": "bd prairie au duc"
    },
    "cars": [
       {"brand": "Ford", "model": "Transit", "km": 123456},
       {"brand": "Renault", "model": "Clio", "km": 87234}
    ]
  },
   {
    "name": "Emma",
    "age": 34,
    "male": true,
    "addresses": {
       "city": "Paris",
       "zip": "75000",
       "street": "bd Saint-Germain"
    },
    "cars": [
       {"brand": "Tesla", "model": "Model 3", "km": 63456},
       {"brand": "Ford", "model": "Mustang Mach-E", "km": 32543},
       {"brand": "Volkswagen", "model": "Golf 8", "km": 43876},
    ]
  }
]
```

## [Extract a sub-part of the response] (レスポンスのサブ部分を抽出)

この設定はレスポンスのペイロード全体を処理し、 返したいサブエレメントを抽出します。セレクターが配列を指す場合、項目ごとに出力レコードを1つ生成します。

| [Extract a sub-part of the response] (レスポンスのサブ部分を抽出)の値 | 結果 |
| --- | --- |
| &lt;empty&gt;<br><br>または.<br><br>または.root<br><br>(この3つの値は同じ結果を返します) | レスポンスペイロードを返します。この例では、PeterとEmmaの完全レコードが返されます。 |
| .root[1]<br><br>ドキュメントが配列([で開始され、]で終了)で、そこから項目を1つだけ抽出したい場合は、.rootを使えばインデックスを定義できます。確かに.[1]と[1]は有効ではありませんが、.root[1]はドキュメントの2番目のエレメント(インデックスは0から開始)を抽出します。 | 2番目のレスポンスペイロードを返します。この例では、Emmaの完全レコードが返されます。 |
| .root[1].cars<br><br>部分配列を選択してループさせることができます。 | 2番目のレスポンスペイロードの一部を返します。この例では、Emmaが所有する車が含まれているレコードが返されます。 |
| .root[1].cars{.km &gt; 40000}<br><br>返されたエレメントをフィルタリングできます。 | 2番目のレスポンスペイロードの一部を返します。この例では、Emmaが所有し、走行距離が40,000kmを超える車が含まれているレコードが返されます。 |

## [Output key/value pair] (出力キー/値のペア)

[Extract a sub-part] (サブ部分を抽出)パラメーターを使ってメインデータが抽出されたら、値をいくつか抽出してフラットレコードを作成することもできます。

これを行うには、[Output key/value pairs] (出力キー/値のペア)を有効にし、[Name] (名前) / [Value] (値)エントリーを追加します。[Name] (名前)は出力レコードのフィールド名となり、[Value] (値)にはコネクターに設定されたHTTPクエリーのレスポンスから値を取得するためのDSSLセレクターが含まれます。

この例では、[Extract a sub-part of the response value] (レスポンスのサブ部分を抽出)値が . なので、PeterとEmmaという2つのレコードがループされます。

| 名前 / 値 | 結果 |
| --- | --- |
| <ul> <li><kbd>name</kbd> / <kbd>{.response.name}</kbd> <p>名前を取得できます</p></li> <li><kbd>age</kbd> / <kbd>{.response.age}</kbd><p>年齢を取得できます</p></li> <li><kbd>address1</kbd> / <kbd>{.response.addresses.street}</kbd><p>address1フィールドにあるaddressのstreet属性を設定できます</p></li> <li><kbd>address2</kbd> / <kbd>{.response.addresses.zip} {.response.addresses.city}</kbd><p>addressサブオブジェクトのzip属性とcity属性をaddress2フィールドに連結できます</p></li> <li><kbd>first_car_brand</kbd> / <kbd>{.response.cars[0].brand}</kbd><p>car配列の最初の項目のbrand 属性を抽出できます</p></li> </ul> | [Name/Value] (名前/値)エントリーに含まれているペイロードからデータを抽出し、カラムに配置します。この例では、PeterとEmmaの名前、年齢、住所、最初の車のブランドが含まれているレコードが抽出されます。 |