如何解析Wufoo形式的webhook散列来获取表单标签和值?
我想解析这是我从Wufoo项目网络挂接API收到的哈希值。我这样做的多种形式,所以我不能像硬编码值:params['Field5']
,因为我不知道有多少领域都有。如何解析Wufoo形式的webhook散列来获取表单标签和值?
>> params.class
=> Hash
>> params
=> {"FieldStructure"=>
"{\"Fields\":[
{\"Title\":\"Company Name\",\"Type\":\"text\",\"ID\":\"Field6\"},
{\"Title\":\"Email\",\"Type\":\"email\",\"ID\":\"Field5\"}
]}",
"Field6"=>"testse",
"Field5"=>"[email protected]",
"CreatedBy"=>"public",
"DateCreated"=>"2013-04-10 07:38:09",
"EntryId"=>"21"}
基本上,我想创建上面的属性从哈希对象:
company_name: "testse", email: "[email protected]"
您可以:
- 扫描FieldStructure字符串来确定所需的字段标识。
- 然后使用IDS找到params哈希表所需的值
例子:
params = {"FieldStructure"=>
"{\"Fields\":[{\"Title\":\"Company Name\",\"Instructions\":\"\",\"IsRequired\":\"0\",\"ClassNames\":\"\",\"DefaultVal\":\"\",\"Page\":\"1\",\"Type\":\"text\",\"ID\":\"Field6\"},
{\"Title\":\"Email\",\"Instructions\":\"\",\"IsRequired\":\"0\",\"ClassNames\":\"\",\"DefaultVal\":\"\",\"Page\":\"1\",\"Type\":\"email\",\"ID\":\"Field5\"}]}",
"FormStructure"=>
"{\"Name\":\"TestForm\",\"Description\":\"This is my form. Please fill it out. It's awesome!\",\"RedirectMessage\":\"Great! Thanks for filling out my form!\",\"Url\":\"testform\",\"Email\":null,\"IsPublic\":\"1\",\"Language\":\"english\",\"StartDate\":\"2000-01-01 12:00:00\",\"EndDate\":\"2030-01-01 12:00:00\",\"EntryLimit\":\"0\",\"DateCreated\":\"2013-04-09 06:44:12\",\"DateUpdated\":\"2013-04-10 05:25:55\",\"Hash\":\"z7x3p3\"}",
"Field6"=>"testse",
"Field5"=>"[email protected]",
"CreatedBy"=>"public",
"DateCreated"=>"2013-04-10 07:38:09",
"EntryId"=>"21",
"IP"=>"46.205.117.55",
"HandshakeKey"=>""}
fields = params['FieldStructure'].scan(/Title\":\"(.+?)\".+?ID\":\"(.+?)\"/)
#=> [["Company Name", "Field6"], ["Email", "Field5"]]
Hash[fields.collect{ |field|
[
field[0].gsub(/\s+/, "_").downcase.to_sym,
params[field[1]]
]
}]
#=> {:company_name=>"testse", :email=>"[email protected]"}
贾斯汀你明白为什么当我有这个PARAMS在单行扫描场不工作? => https://gist.github.com/regedarek/a1920bf86346e8d24fee – tomekfranek 2013-04-11 11:38:37
为标题值以及id值之间的文本的检查是贪婪的,所以你得到的是与电子邮件ID相匹配的公司名称称号。它应该是'.scan(/标题\ “:\”(+)\ “+ ID \? ”:?\“(+)\。?”/)',它具有在一个额外的''?中间。 – 2013-04-11 13:10:43
好的,非常感谢。 – tomekfranek 2013-04-11 13:21:17
您的输入哈希非常难看。你可以重新编辑它吗? – 2013-04-10 20:21:34
当然。完整版在这里:https://gist.github.com/a1920bf86346e8d24fee – tomekfranek 2013-04-10 20:34:54