如何判断pick()的结果是否为字符串

时间:2011-06-22 15:48:13

标签: krl

我正在通过数据源使用Goodreads API。我使用ISBN号进行搜索,如果有,则返回结果。如果找到这本书,这就是它的样子:

<GoodreadsResponse>
    <Request>
        <authentication>true</authentication>
        <key><![CDATA[--redacted--]]></key>
        <method><![CDATA[api_book_url]]></method>
    </Request>
    <book id="6558055">
        <title><![CDATA[Mythical Man-Month, The: Essays on Software Engineering, Anniversary Edition]]></title>
        <isbn><![CDATA[]]></isbn>
        <link>http://www.goodreads.com/book/show/6558055-mythical-man-month-the?utm_medium=api&amp;utm_source=book_link</link>
    </book>
</GoodreadsResponse>

如果找不到该书,除了<book>部分不存在外,它将是相同的。您可以想象一旦KRL解析了这个XML后JSON的样子。

pick()link标记排除在响应之外:

url = data.pick("$..link.$t");

如果有<book>部分,则效果很好; url将是一个字符串。但如果没有<book>部分,url将是一个空数组([])。

如果url是一个字符串,我只希望我的规则中的操作能够运行。我尝试过使用像if url != [] thenurl.length()这样的东西(总是为零),但这些都不起作用。

如何判断url何时是一个字符串,何时是一个空数组?

1 个答案:

答案 0 :(得分:2)

您问题的直接答案是.typeof(),文档here

示例条件和操作:

if url.typeof() eq 'array' then  
  noop()

处理这种情况的另一种方法是传入true作为pick的第二个参数,这将导致答案始终是一个数组。这在pick的文档中有所描述。

由于它始终是一个数组,因此您可以使用.length()来测试匹配。