2012-08-16 44 views
1

我有一个大的哈希是这样的:如何使用名称(值)将键名解析为具有原始值的键/值对的哈希?

{"id"=>"1", 
"contact_id"=>"15062422", 
"status"=>"Complete", 
"[question(12), option(24), piped_page(32]" => "Yes", 
"[question(13), option(32)]" => "Robert", 
"[question(14)]" => "Thing"} 

我需要解析与启动键“[”来分隔名称(value)对。每个键中的名称数量(即问题,选项等)是可变的,但是存在已知数量的可能性。

我想每对转换成一个新的有这样的:

{:question => 12, :option => 24, :piped_page => 32, :value => "Yes"} 

我想用每个哈希元素.to_s,然后做各种字符串替换,随后的EVAL,但.to_s可以避免使事情复杂化的双引号。

任何想法?

回答

1

您可以使用正则表达式来解决这个问题:

str = "[question(12), option(24), piped_page(32)]" 
Hash[str.scan /(\w+)\((\w+)\)/] 

=> {"question"=>"12", "option"=>"24", "piped_page"=>"32"} 
+0

完美地工作! – 2012-08-16 19:43:38