字符串到哈希转换
我怎么能把字符串转换为哈希?
现在我使用:
eval "{'1627207:28320'=>'text'}" => {'1627207:28320'=>'text'}
但“eval”对我的情况不利 – 从params传递的字符串,这种情况并不安全
编辑:
传递字符串也可以是:
"{'1627207'=>'text', '11:167:28320'=>'text 1 / text 2 / unicode=>привет!'}"
然后需要结果哈希:
{'1627207:28320'=>'text', '11:167:28320'=>'text 1 / text 2 / unicode=>привет!'}
str = "{'1627207:28320'=>'text'}" p Hash[*str.delete("{}'").split('=>')] #{"1627207:28320"=>"text"}
编辑不同的输入:
str = "{'1627207:28320'=>'text', 'key2'=>'text2'}" p Hash[*str.delete("{}'").split(/=>|, /)] #{"1627207:28320"=>"text", "key2"=>"text2"}
class String def to_h h={} self.scan(/'(\w+.\w+)'=>'(\w+)'/).each { |k,v| h[k]=v } h end end p "{'1627207:28320'=>'text','test'=>'text2'}".to_h =>{"1627207:28320"=>"text", "test"=>"text2"}
编辑:较短的版本
class String def to_h Hash[self.scan(/'([^']+)'=>'([^']+)'/)] end end
很直接:
$ irb irb(main):001:0> k='1627207:28320' => "1627207:28320" irb(main):002:0> v='text' => "text" irb(main):003:0> h={k => v} => {"1627207:28320"=>"text"} irb(main):004:0> h => {"1627207:28320"=>"text"} irb(main):005:0>
你可以试试这个:
text_hash['1627207:28320'] = 'text' text_hash