

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 Lex V2 机器人中设置复杂属性
<a name="context-mgmt-complex-attributes"></a>

会话和请求属性是属性和值的 string-to-string映射。在许多情况下，您可以使用字符串映射在客户端应用程序与自动程序之间传输属性值。但在某些情况下，您可能需要传输无法轻易转换为字符串映射的二进制数据或复杂结构。例如，以下 JSON 对象表示由美国人口最多的三个城市组成的数组：

```
{
   "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"
         }
      }
   ]
}
```

这个数据数组不能很好地转换为 string-to-string地图。在这种情况下，您可以将对象转换为一个简单字符串，以便通过 [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`操作发送属性，在将属性添加到请求标头之前，必须对这些属性进行 base64 编码，如以下 JavaScript代码所示：

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

您可以通过先将二进制数据转换为 base64 编码字符串、然后将该字符串作为会话属性中的值发送，来向 `RecognizeText` 和 `RecognizeUtterance` 操作发送二进制数据：

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