1

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

{"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 转义了双引号,这确实使事情变得复杂。

有任何想法吗?

4

1 回答 1

1

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

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

=> {"question"=>"12", "option"=>"24", "piped_page"=>"32"}
于 2012-08-16T14:39:36.607 回答