我目前正在开发基于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
}]
}
提前致谢。
答案 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次。这是为了阻止潜在的无限循环。
但实际上,您可以通过在应用程序层正确格式化数据来轻松解决所有这些问题。