我有一个像这样的大哈希:
{"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会转义双引号,这会使事情变得复杂。
有什么想法吗?
答案 0 :(得分:1)
您可以使用正则表达式来解决它:
str = "[question(12), option(24), piped_page(32)]"
Hash[str.scan /(\w+)\((\w+)\)/]
=> {"question"=>"12", "option"=>"24", "piped_page"=>"32"}