如何将具有名称(值)对的键名解析为具有原始值的键/值对的散列?

时间:2012-08-16 14:29:10

标签: ruby-on-rails ruby

我有一个像这样的大哈希:

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

我需要解析以'['开头的键来分隔名称(值)对。每个密钥中的名称数量(即问题,选项等)是可变的,但存在已知数量的可能性。

我想将每一对转换成一个像这样的新对象:

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

我想过在每个哈希元素上使用.to_s然后执行各种字符串替换,然后是eval,但.to_s会转义双引号,这会使事情变得复杂。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式来解决它:

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

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