2012-08-16 50 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