3
我從一個XML數據源,看起來像這樣回來的哈希:採摘哈希陣列從一個哈希
{...,
'records' :{
'record' :[
{'availability' :{'$t' :'available'}, ...},
{'availability' :{'$t' :'available'}, ...}
]
}
};
我想獲得的所有record
哈希到一個數組這樣我就可以filter()
它並做一些其他的操作。然而,當我在我的pre
塊這一說法,
raw_records = raw.pick("$..record");
被返回數組是兩個空字符串數組:
var raw_records = ['', ''];
奇怪的是,我可以挑選出只是availability
與預期的結果:
availability = raw.pick("$..availability.$t");
生產
var availability = ['available', 'available'];
我的第一個pick()
有什麼問題?
編輯:這是一個更完整的版本,應該有助於重現問題。這有點不同,因爲我現在使用JSON版本的Web服務:
global {
datasource hbll <- "https://svc.lib.byu.edu/services/catalog/v1/search/?field=isbn&format=json&terms=";
}
rule new_rule {
select when pageview "amazon.com/.*/?dp/(.*)/" setting (isbn)
pre {
//This is the array with two empty strings...
raw = datasource:hbll(isbn);
myfilter = function(x) { x.pick("availability") eq "available"; };
records = raw.filter(myfilter);
len = records.length();
availability = records.pick("$..availability");
middleman = len > 1 => availability[0] | availability;
available = middleman eq "available" => true | false;
url_list = records.pick("$..url");
url = len > 1 => url_list[0] | url_list;
msg = <<
<p>This book is available for checkout at the BYU Library.</p>
<a href="#{url}">More information</a>
>>;
}
notify("BYU Harold B. Lee Library", msg) with sticky=true;
}
無法重現。需要更多信息。 :) – Alex 2011-04-25 23:31:49
現在正在努力複製和挖掘。感謝您的擴展示例。 – Alex 2011-04-26 02:42:12
對於上面的示例,當我遇到此問題時,我一直在測試http://www.amazon.com/Sams-Teach-Yourself-Java-Hours/dp/0672330768/。 – 2011-04-26 02:50:40