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 に答える