2017-08-17 42 views
0

在IBM Conversation中,如果我们创建一个包含其他数组(如实体)的上下文变量数组,则它将成为一个字符串数组。根据文档,您不能在字符串阵列上执行数组方法,如size()length()。任何方式来执行字符串数组的这些功能?如何在IBM对话中的字符串数组上应用数组方法

+0

我在这里有一些例子https://github.com/IBM-Bluemix/watson-conversation-variables另外,你可以添加一个例子给你有问题吗? –

回答

2

Watson对话服务中的数组和字符串类型有所不同。要获取有关数组大小的信息 - 即获取有关数组类型包含的元素数量的信息,可以使用size()方法。

对于获取关于字符串中字符数的信息的字符串类型,可以使用length()方法。

这里是两个例子。该字符串看起来像一个数组,但它是一个字符串(由引号""封闭注意数组类型缺少引号是:

{ 
    "context": { 
    "my_string" : "[\"one\", \"two\", \"three\"]", 
    "my_array": [ 
     "one", 
     "two", 
     "three" 
    ] 
    }, 
    "output": { 
    "text": { 
     "values": [ 
     "This is string size: <?$my_string.length()?>. This is my array size: <? context.my_array.size()?>" 
     ], 
     "selection_policy": "sequential" 
    } 
    } 
} 

这里是从对话框中选择答案: This is string size: 23. This is my array size: 3

功能length()为支持字符串类型。 功能size()上支持数组类型。

+2

这是一个WCS doc的'size()'方法的链接:https://console.bluemix.net/docs/services/conversation/dialog-methods.html#methods-to-process-values –

+0

嗨Michal,我的查询实际上与“字符串数组”有关,这些数组是包含在Conversation doc中定义的数组的数组。如果数组是:“$ array:[”one“,”two“] 然后 - > $ string_array:”string array:[\“one \”,\“two \”]“ 随后可以在$ array变量上执行数组方法,例如<?$ array.removeValue('two')?>但不是$ string_array变量。“ –

+0

啊我明白了。我被名字中的数组混淆了。 :)所以'string_array'是字符串类型的inf事实...我已经更新了答案。 –

0

我觉得文档中的例子可能会混淆你。

您可以嵌套数组,甚至字符串数组,仍然可以将它们作为数组数据类型进行操作。您在文档中引用的示例的目的是显示如果在对话框响应中包含数组上下文变量作为字符串的一部分,则该数组将被视为字符串数据类型。

例如,你可以在JSON编辑器对话框节点指定此:

{ 
    "context": { 
     "array": [ 
      "one", 
      "two" 
     ], 
     "array_of_strings": [ 
      "<? $array ?>", 
      "three", 
      "four" 
     ], 
     "string_array": "this is an array: $array" 
    }, 

当您执行的“尝试一下”面板中的节点,然后检查上下文变量的值,它们是这样的:

$array 
["one","two"] 

$array_of_strings 
[["one","two"],"three","four"] 

$string_array 
"this is an array: [\"one\",\"two\"]" 

注:我能够包括第一阵列作为我$array_of_strings上下文变量数组的数据类型。直到我将数组包含在一个字符串中,它就像一个字符串一样。我希望这是有道理的?

相关问题