如何在IBM对话中对字符串数组应用数组方法

时间:2017-08-17 12:35:46

标签: ibm-watson watson-conversation

在IBM Conversation中,如果我们创建一个包含其他数组(如实体)的上下文变量数组,那么它就变成了一个字符串数组。根据文档,您无法在字符串数组上执行size()length()等数组方法。有什么办法在字符串数组上执行这样的函数吗?

2 个答案:

答案 0 :(得分:2)

Watson Conversation Service中的数组和字符串类型之间存在差异。要获取有关数组大小的信息 - 即获取有关数组类型包含的元素数的信息,可以使用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()

答案 1 :(得分:0)

我认为文档中的示例可能让您感到困惑。

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

例如,您可以在JSON编辑器中为对话节点指定:

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

当你在&#34中执行节点时,试试看&#34;面板,然后检查上下文变量值,它们看起来像这样:

$array
["one","two"]

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

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

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