Watson Conversation获取数组中每个元素的第一个键

时间:2018-04-10 11:19:35

标签: ibm-watson watson-conversation watson-dialog watson-assistant

我目前正在开发基于IBM Watson对话的聊天机器人。 我正在努力从过滤器中的enginePower中取出密钥。 我需要在聊天中显示每个键。因此用户可以选择一个。

结构如下:

"filter": {
"enginePower": [{
            "key": "55",
            "text": "55 kW (75 PS)",
            "selectable": false
          },
          {
            "key": "65",
            "text": "65 kW (88 PS)",
            "selectable": false
          },
          {
            "key": "66",
            "text": "66 kW (90 PS)",
            "selectable": false
          },
          {
            "key": "81",
            "text": "81 kW (110 PS)",
            "selectable": false
          }]
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

简短回答:

Your key values are: <? T(String).join( ",", $filter.get('enginePower').![key] ) ?>

细分

$filter.get('enginePower')

这会将enginePower作为包含所有对象的数组返回。

.![key]

这会将“Key”字段值作为数组返回。

T(String).join( ",", XXX )

这会将您的数组XXX转换为逗号分隔列表。

所以你的最终结果会说:

Your key values are: 55,65,66,81

只是添加到此。您只能获得单个键/值列表。如果要使用键查找捕获不同属性的值,则需要循环。

例如,首先将counter设置为0。然后让您的节点检查$filter.enginePower.size() > $counter

在该节点中,您可以设置“多个响应”。然后,对于第一个条件,您设置$filter.enginePower[$counter].selectable == true。如果该字段为true,这将允许您采取措施。

在此之后,您需要创建一个子节点,并让父节点跳转到它。在子节点响应中放置<? $counter = $counter + 1 ?>。最后让子节点跳回到父节点。

这将遍历数组。 警告!您只能在循环结束前循环50次。这是为了阻止潜在的无限循环。

但实际上,您可以通过在应用程序层正确格式化数据来轻松解决所有这些问题。