2011-06-22 4 views
2

データソースを通じてGoodreads APIを使用しています。私はISBN番号で検索し、結果があれば結果を返します。ここでは本が見つかった場合、それは次のようになります。pick()の結果が文字列であるかどうかを確認する方法

<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>セクションが存在しないことを除いて同じになります。このXMLがKRLによって解析されると、JSONの外観を想像することができます。

私はこのような応答のうちlinkタグINGのpick()だ:だけで正常に動作し<book>セクションがある場合

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

を。 urlは文字列になります。しかし、<book>セクションがない場合、urlは空の配列([])になります。

urlが文字列の場合にのみ、私のルール内のアクションを実行します。私はif url != [] thenまたはurl.length()(常にゼロ)のようなものを使ってみましたが、それらのどれも動作しませんでした。

urlが文字列で、空の配列の場合はどうすればわかりますか?

答えて

2

ご質問に対する直接の回答は、.typeof()、docs hereです。

例の条件とアクション:このような状況に対処するために

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

もう一つの方法は、答えは常に配列であることになりますピックの第2引数としてtrueに渡すことです。これはpickの文書に記述されています。

これは常に配列になるため、.length()を使用して一致をテストできます。

関連する問題