> ## Documentation Index
> Fetch the complete documentation index at: https://www.integrate.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# ETL: Extended JSON extractionによるネスト構造の展開

> Integrate.io ETLのREST API Sourceが新たにサポートするExtended JSON extraction機能を使い、ネストされたJSONレスポンスから必要なフィールドだけを平坦化して取り出す方法を解説します。

REST API からデータを取得してパイプラインに組み込みたいケースは、ETL 業務で非常に多いシナリオです。しかし、レスポンスのJSONは入れ子のオブジェクトや配列を含む複雑な構造になっていることが多く、**「必要なフィールドだけを平坦化して取り出す」作業に手間がかかります**。

Xplentyの**Rest API Source**コンポーネントは、HTTP エンドポイントからのデータ取得、認証、ページネーション、そしてレスポンスのパースまでをローコードで完結できるソースコンポーネントです。
新たに加わった**Extended JSON extraction**機能を使えば、ネストされたJSONのフィールドをスキーマ上で直接選択・展開でき、後続コンポーネントにフラットなデータとして渡すことが可能になります。

<Frame>
  <img src="https://mintcdn.com/integrateio/X6Tbr12w4wun31Cu/images/japanese-knowledge-base/restapi-part09-jp/image-1.webp?fit=max&auto=format&n=X6Tbr12w4wun31Cu&q=85&s=95d0e3ddb245c166267656f9c6c2e61b" alt="restapi-part09-jp image 1" width="816" height="610" data-path="images/japanese-knowledge-base/restapi-part09-jp/image-1.webp" />
</Frame>

本記事では、Rest API Source のExtended JSON extractionの実践的な使い方までを解説します。

## Rest API Sourceの概要

Rest API Source は、REST Web サービスなどの HTTP エンドポイントからデータを読み取るためのコンポーネントです。パッケージデザイナー上で以下の要素を定義するだけで、API データの取り込みパイプラインを構築できます。

<Frame>
  <img src="https://mintcdn.com/integrateio/X6Tbr12w4wun31Cu/images/japanese-knowledge-base/restapi-part09-jp/image-2.webp?fit=max&auto=format&n=X6Tbr12w4wun31Cu&q=85&s=0ed50f73091e4aa25675fca46b7e7ff0" alt="restapi-part09-jp image 2" width="1049" height="325" data-path="images/japanese-knowledge-base/restapi-part09-jp/image-2.webp" />
</Frame>

* ステップ１：認証方式
  * 認証なし

<Frame>
  <img src="https://mintcdn.com/integrateio/X6Tbr12w4wun31Cu/images/japanese-knowledge-base/restapi-part09-jp/image-3.webp?fit=max&auto=format&n=X6Tbr12w4wun31Cu&q=85&s=1fb7e39b36032c4421d974bc8d0fa191" alt="restapi-part09-jp image 3" width="1047" height="313" data-path="images/japanese-knowledge-base/restapi-part09-jp/image-3.webp" />
</Frame>

* Basic 認証

<Frame>
  <img src="https://mintcdn.com/integrateio/X6Tbr12w4wun31Cu/images/japanese-knowledge-base/restapi-part09-jp/image-4.webp?fit=max&auto=format&n=X6Tbr12w4wun31Cu&q=85&s=e61c89ada16f09533d25cad3056687a9" alt="restapi-part09-jp image 4" width="1056" height="483" data-path="images/japanese-knowledge-base/restapi-part09-jp/image-4.webp" />
</Frame>

* Connection

<Frame>
  <img src="https://mintcdn.com/integrateio/X6Tbr12w4wun31Cu/images/japanese-knowledge-base/restapi-part09-jp/image-5.webp?fit=max&auto=format&n=X6Tbr12w4wun31Cu&q=85&s=a340d0186f30f1e6969756b0407785ed" alt="restapi-part09-jp image 5" width="1054" height="458" data-path="images/japanese-knowledge-base/restapi-part09-jp/image-5.webp" />
</Frame>

* ネイティブコネクターによる認証は、Connectionで該当の**ネイティブコネクター**を選択
* 他のOAuth認証は、Connectionで設定済みの**Universal OAuthコネクター**を選択
* ステップ２：リクエストとレスポンスの設定
  * リクエストの設定（HTTP メソッド、URL、ヘッダー、ボディ）
  * ページネーションの設定
  * レスポンスのパース方式
  * Extended JSON extractionの使用有無

<Frame>
  <img src="https://mintcdn.com/integrateio/X6Tbr12w4wun31Cu/images/japanese-knowledge-base/restapi-part09-jp/image-6.webp?fit=max&auto=format&n=X6Tbr12w4wun31Cu&q=85&s=791bd68531c11c223fa6d61b86f6e200" alt="restapi-part09-jp image 6" width="1051" height="1185" data-path="images/japanese-knowledge-base/restapi-part09-jp/image-6.webp" />
</Frame>

* ステップ３：入力フィールドの選択
  * フィールド選択
  * Extended JSON extractionの有効時に追加のフィールド選択(タブー形式)
  * データプレビュー

<Frame>
  <img src="https://mintcdn.com/integrateio/X6Tbr12w4wun31Cu/images/japanese-knowledge-base/restapi-part09-jp/image-7.webp?fit=max&auto=format&n=X6Tbr12w4wun31Cu&q=85&s=b2828a7e091edf5b00f896a1afbe16c2" alt="restapi-part09-jp image 7" width="1051" height="1321" data-path="images/japanese-knowledge-base/restapi-part09-jp/image-7.webp" />
</Frame>

## Extended JSON extraction：ネストされたJSONを直接展開

### Extended JSON extraction とは

通常の JSON パースでは、レスポンスの第 1 階層のキーのみがフィールドとして認識されます。たとえば、以下のような API レスポンスがあった場合を考えてみましょう。

```json theme={null}
{
  "id": 1,
  "name": "Example",
  "address": {
    "city": "Tokyo",
    "zip": "100-0001"
  },
  "tags": [
    { "name": "priority" },
    { "name": "active" }
  ]
}
```

通常のパースでは `id`、`name`、`address`（オブジェクトのまま）、`tags`（配列のまま）の 4 フィールドしか取得できません。`address.city` や `tags[*].name` といったネストされた値を個別に取り出すには、後続の変換コンポーネントで追加処理が必要でした。

Extended JSON extraction を **true** に設定すると、これらのネストされたプロパティや配列の要素がスキーマセクションに展開表示され、チェックボックスで直接選択できるようになります。つまり、`address.city`、`address.zip`、`tags[*].name` などを Rest API Source の段階でフラットなフィールドとして取り出せるのです。

### Multiple output parsesによる複数のデータセットを抽出

REST API のレスポンスが複雑で、異なるパスのデータを別々のコンポーネントに渡したいケースもあります。たとえば、1回のAPIコールで注文データと注文明細データを同時に含むレスポンスが返される場合、注文データは注文テーブルへ、明細データは明細テーブルへとそれぞれ別の流れで処理したい、というシナリオです。

コンポーネント設定画面のレスポンスセクションで、**Extended JSON extraction** オプションを**true**に設定します。設定後、スキーマセクションにネスト構造が展開された状態でフィールドが表示されるので、必要なフィールドにチェックを入れてください。

<Frame>
  <img src="https://mintcdn.com/integrateio/X6Tbr12w4wun31Cu/images/japanese-knowledge-base/restapi-part09-jp/image-8.webp?fit=max&auto=format&n=X6Tbr12w4wun31Cu&q=85&s=463712daa0427c7c019661d3007b9841" alt="restapi-part09-jp image 8" width="598" height="388" data-path="images/japanese-knowledge-base/restapi-part09-jp/image-8.webp" />
</Frame>

Extended JSON extractionでは、**+ Add output parse** ボタンを使って複数の出力パースを追加できます。追加された各パースはそれぞれ独立したスキーマセクションを持ち、異なるエッジ名を付けることが可能です。これにより、1 つの API レスポンスから複数の視点でデータを抽出し、それぞれを異なる後続コンポーネント（変換やデスティネーション）に接続できます。

<Frame>
  <img src="https://mintcdn.com/integrateio/X6Tbr12w4wun31Cu/images/japanese-knowledge-base/restapi-part09-jp/image-9.webp?fit=max&auto=format&n=X6Tbr12w4wun31Cu&q=85&s=97f06cf6a371b884d286b46e1aecb7c6" alt="restapi-part09-jp image 9" width="976" height="747" data-path="images/japanese-knowledge-base/restapi-part09-jp/image-9.webp" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/integrateio/X6Tbr12w4wun31Cu/images/japanese-knowledge-base/restapi-part09-jp/image-10.webp?fit=max&auto=format&n=X6Tbr12w4wun31Cu&q=85&s=8077f40e03c2af8c376eed06dc1ee3f6" alt="restapi-part09-jp image 10" width="973" height="747" data-path="images/japanese-knowledge-base/restapi-part09-jp/image-10.webp" />
</Frame>

* Bagデータの抽出

<Frame>
  <img src="https://mintcdn.com/integrateio/X6Tbr12w4wun31Cu/images/japanese-knowledge-base/restapi-part09-jp/image-11.webp?fit=max&auto=format&n=X6Tbr12w4wun31Cu&q=85&s=8f8aa062a201655b2f29e90aeefa923f" alt="restapi-part09-jp image 11" width="1052" height="723" data-path="images/japanese-knowledge-base/restapi-part09-jp/image-11.webp" />
</Frame>

* Mapデータの抽出

<Frame>
  <img src="https://mintcdn.com/integrateio/X6Tbr12w4wun31Cu/images/japanese-knowledge-base/restapi-part09-jp/image-12.webp?fit=max&auto=format&n=X6Tbr12w4wun31Cu&q=85&s=3e95a1f9f957912bec0f46bf0e1786da" alt="restapi-part09-jp image 12" width="975" height="1032" data-path="images/japanese-knowledge-base/restapi-part09-jp/image-12.webp" />
</Frame>

* 複合データの抽出

<Frame>
  <img src="https://mintcdn.com/integrateio/X6Tbr12w4wun31Cu/images/japanese-knowledge-base/restapi-part09-jp/image-13.webp?fit=max&auto=format&n=X6Tbr12w4wun31Cu&q=85&s=93fe9d21c4b8f180407b7d6468f7a699" alt="restapi-part09-jp image 13" width="978" height="1121" data-path="images/japanese-knowledge-base/restapi-part09-jp/image-13.webp" />
</Frame>

### Extended JSON extraction を使う場面

* レスポンスにネストされたオブジェクトや配列が含まれていて、その中のフィールドを個別に取り出したい場合
* ネスト構造の展開処理をソースコンポーネントの段階で完結させ、下流の変換処理をシンプルに保ちたい場合
* 1つのレスポンスから複数の出力パースを生成して、異なるデスティネーションに振り分けたい場合
* サンプルデータに現れないフィールドを Key の手動編集で明示的に定義したい場合

### Key の手動編集：スキーマに表示されないフィールドへの対応

Extended JSON extractionを有効にしても、API レスポンスのサンプルデータの状態によっては、一部のネストフィールドがスキーマのフィールド一覧に表示されないことがあります。これは、サンプルとして取得されたレコードにおいて、そのフィールドが空（null や空配列）だった場合に発生します。

たとえば、`tags` が配列フィールドであるにもかかわらず、最初のレコードの`tags`が空配列 `[]` だった場合、`tags[*].test_field` はフィールド一覧に自動で現れません。

このようなケースでは、**スキーマのKeyを手動で編集**して対応できます。スキーマセクションで該当フィールドのKey値を直接`tags[*].test_field`のように書き換えることで、パイプライン実行時にそのフィールドが利用可能なレコードからは値が取得され、利用できないレコードでは null が設定されます。

<Frame>
  <img src="https://mintcdn.com/integrateio/X6Tbr12w4wun31Cu/images/japanese-knowledge-base/restapi-part09-jp/image-14.webp?fit=max&auto=format&n=X6Tbr12w4wun31Cu&q=85&s=00adb653f9b249fb15f57af93e1cbadd" alt="restapi-part09-jp image 14" width="1051" height="1072" data-path="images/japanese-knowledge-base/restapi-part09-jp/image-14.webp" />
</Frame>

この手動編集機能は、レスポンスの構造は把握しているものの、サンプルデータに全パターンが含まれていない場合に非常に便利です。

## 制限事項

Rest API Source を使用する際に知っておくべき制限事項があります。

* \*\*$ 記号のエスケープ**：API コール内で `$`記号を使用する場合は、バックスラッシュ`\` でエスケープする必要があります（`\$`）。なお、ランタイムでは正常に実行されますが、API ソースコンポーネントのプレビューやフロー内のコンポーネントプレビューではエラーが発生します
* **BAG フィールドの展開制限**：1 つのパースあたり、展開（flatten）できる BAG フィールドは 1 つまでです。別の BAG フィールドも展開したい場合は、新しいパースを追加して対応してください
  * Bagタイプデータの展開前

<Frame>
  <img src="https://mintcdn.com/integrateio/X6Tbr12w4wun31Cu/images/japanese-knowledge-base/restapi-part09-jp/image-15.webp?fit=max&auto=format&n=X6Tbr12w4wun31Cu&q=85&s=1fc50aa5cc54ac60942eb8d02f56409b" alt="restapi-part09-jp image 15" width="1053" height="1209" data-path="images/japanese-knowledge-base/restapi-part09-jp/image-15.webp" />
</Frame>

* Bagタイプデータの展開後

<Frame>
  <img src="https://mintcdn.com/integrateio/X6Tbr12w4wun31Cu/images/japanese-knowledge-base/restapi-part09-jp/image-16.webp?fit=max&auto=format&n=X6Tbr12w4wun31Cu&q=85&s=33df6d532109884af00c17ab7e25b606" alt="restapi-part09-jp image 16" width="1054" height="1222" data-path="images/japanese-knowledge-base/restapi-part09-jp/image-16.webp" />
</Frame>

## まとめ

Rest API Source は、外部 API からのデータ取り込みを認証・リクエスト・ページネーション・パースまで一貫してローコードで構築できるコンポーネントです。

特に **Extended JSON extraction** 機能は、従来であれば後続の変換コンポーネントで行っていたネスト構造の展開処理をソースの段階で完結させることができ、パイプライン全体の設計をシンプルに保てます。Key の手動編集によるスキーマ定義や、Multiple output parses による複数出力の生成など、実務で頻繁に求められるシナリオにも柔軟に対応できます。

まずは対象 API の認証方式とレスポンス構造を確認し、Extended JSON extraction の有効化を検討してみてください。ネストが深い API レスポンスほど、この機能の恩恵を強く実感できるはずです。
