

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Lex V2 ボットでの複雑な属性の設定
<a name="context-mgmt-complex-attributes"></a>

セッション属性およびリクエスト属性は、属性と値の文字列間マップです。多くの場合、文字列マップを使用してクライアントアプリケーションとボットの間で属性値を転送できます。ただし、場合によっては、文字列マップに容易に変換できないバイナリデータや複雑な構造の転送が必要になることもあります。例えば、次の JSON オブジェクトは米国の最も人口が多い 3 つの都市の配列を示しています。

```
{
   "cities": [
      {
         "city": {
            "name": "New York",
            "state": "New York",
            "pop": "8537673"
         }
      },
      {
         "city": {
            "name": "Los Angeles",
            "state": "California",
            "pop": "3976322"
         }
      },
      {
         "city": {
            "name": "Chicago",
            "state": "Illinois",
            "pop": "2704958"
         }
      }
   ]
}
```

このデータの配列は、文字列間マップに適切に変換されません。このような場合は、オブジェクトを単純な文字列に変換し、その文字列を [RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html) オペレーションと [RecognizeUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html) オペレーションを使用してボットに送信できます。

例えば、JavaScript を使用している場合は、`JSON.stringify` オペレーションを使用してオブジェクトを JSON に変換し、`JSON.parse` オペレーションを使用して JSON テキストを JavaScript オブジェクトに変換します。

```
// To convert an object to a string.
var jsonString = JSON.stringify({{object}}, null, 2);
// To convert a string to an object.
var {{obj}} = JSON.parse({{JSON string}});
```

セッション属性を `RecognizeUtterance` オペレーションで送信するには、次の JavaScript コードのように、属性を base64 エンコードしてからリクエストヘッダーに追加する必要があります。

```
var {{encodedAttributes}} = new Buffer({{attributeString}}).toString("base64");
```

バイナリデータを `RecognizeText` オペレーションと `RecognizeUtterance` オペレーションに送信する場合は、最初にバイナリデータを base64 エンコードされた文字列に変換し、次にその文字列をセッション属性の値として送信します。

```
"sessionAttributes" : {
   "binaryData": "{{base64 encoded data}}"
}
```