# 入力で目的のエレメントを使用

異なるセットの子を持つ可能性があるエレメントが含まれている入力ファイルをマッピングします。

## 始める前に

* 入力と出力のストラクチャーが作成済みであること。ストラクチャーの作成には下のJSONサンプルを使用できます。

## このタスクについて

この例では、自転車とスクーターの販売情報が含まれている入力JSONファイルがあるとします。このファイルにあるdetailsエレメントは、アイテムのタイプによって異なる子エレメントを持つ可能性があります。項目が自転車であれば、detailsエレメントにはbicycle、seat、derailleurという3つのエレメントが含まれます。項目がスクーターであれば、detailsにはscootersエレメントとmaxWeightエレメントが含まれます。

出力で、detailsエレメントをbicycleエレメントかscooterエレメントに置き換えたいとします。

入力データは次のようになります。

```
[
    {
        "sku": "AB4589",
        "price": 899.99,
        "details": {
            "bicycle": "MBIKE",
            "seat": "ergon",
            "derailleur": "shimano"
        }
    },
    {
        "sku": "DQ5678",
        "price": 899.99,
        "details": {
            "bicycle": "WBIKE",
            "seat": "selle italia",
            "derailleur": "sram"
        }
    },
    {
        "sku": "MF5612",
        "price": 399.99,
        "details": {
            "scooter": "ESCOOT",
            "maxWeight": 70
        }
    },
    {
        "sku": "MF5612",
        "price": 399.99,
        "details": {
            "scooter": "KSCOOT",
            "maxWeight": 50
        }
    }
]
```

出力ストラクチャーは次のようになります。

```
[
    {
        "sku": "",
        "price": 899.99,
        "bicycle": {
            "make": "",
            "seat": "",
            "derailleur": ""
        }
    },
    {
        "sku": "",
        "price": 399.99,
        "scooter": {
            "make": "",
            "maxWeight": 70
        }
    }
]
```

## 手順

1. 作成した入力ストラクチャーを開き、detailsエレメントを展開します。

   detailsがChoiceエレメントであることがわかります。ここにはSequenceエレメントが2つ含まれています。この2つは、detailsの子エレメントの可能性があるセットです。 ![detailsエレメント。](https://help.qlik.com/talend/ja-JP/data-mapper-user-guide/Resources/images/tdm-dsql-map-editor-choice-structure.png)
2. [Read Only] (読み取り専用)をクリックし、ドロップダウンリストで[Editable] (編集可能)を選択します。
3. sequenceをクリックし、[Name] (名前)フィールドにあるsequenceをbicycleに置き換え、sequence\_1をscooterという名前に変更してストラクチャーを保存します。
4. 新しいDSQLマップを作成して入力ストラクチャーと出力ストラクチャーを追加します。

   入力では、detailsエレメントにchoiceというラベルが付けられ、2つの選択肢にインデックスが割り当てられます。このインデックスは、式内の特定の代替エレメントを参照するために使用できます。
5. 次のエレメントをドラッグ＆ドロップしてマッピングします。
   * skuをskuへ
   * priceをpriceへ
   * bicycle {@0}をbicycleへ
   * bicycleをbicycle.makeへ
   * scooterをscooter.makeへ
   * maxWeightをmaxWeightへ

## タスクの結果

エレメントがマッピングされます。出力エレメントであるbicycleとscooterをクリックすると、条件式が自動的に生成されたことがわかります。 ![エレメントマッピング。](https://help.qlik.com/talend/ja-JP/data-mapper-user-guide/Resources/images/tdm-dsql-map-editor-choice-map.png) たとえばIF (isPresent(details.@0))は、details入力エレメントが最初の選択肢と一致する場合のみbicycle出力エレメントを生成することを示します。この例では、[Test Run] (テスト実行)によって次の結果が返されます。

```
[
   {
      "sku":"AB4589",
      "price":899.99,
      "bicycle":{
         "make":"MBIKE",
         "seat":"ergon",
         "derailleur":"shimano"
      }
   },
   {
      "sku":"DQ5678",
      "price":899.99,
      "bicycle":{
         "make":"WBIKE",
         "seat":"selle italia",
         "derailleur":"sram"
      }
   },
   {
      "sku":"MF5612",
      "price":399.99,
      "scooter":{
         "make":"ESCOOT",
         "maxWeight":70
      }
   },
   {
      "sku":"MF5612",
      "price":399.99,
      "scooter":{
         "make":"KSCOOT",
         "maxWeight":50
      }
   }
]
```

bicycleエレメントとscooterエレメントから条件を取り除くと、それぞれの出力に両方のエレメントが含まれ、そのうちの1つは空になります。