2012-05-02 18 views
2

どのように文字列をハッシュに変換できますか?ハッシュ変換の文字列

今私が使用:

eval "{'1627207:28320'=>'text'}" 
=> {'1627207:28320'=>'text'} 

が、 "evalのは、" 私の場合のために良いではありません - のparamsから渡された文字列、およびそのような場合、それは

編集確保されていません。

をまた、渡される文字列は、次のようにすることもできます。

は、次にハッシュを引き起こす必要があります。

{'1627207:28320'=>'text', 
'11:167:28320'=>'text 1/text 2/unicode=>привет!'} 
+1

http://stackoverflow.com/a/9910355/1275603多分私は本当の問題があると思うこと –

+0

ような何か、なぜあなたはあなたのユーザーをさせるされていますあなたのアプリケーションにRubyコードを渡しますか?なぜJSONのように安全に解析できる形式ではないのですか? –

答えて

4
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"} 
+0

これは問題ありませんが、ユーザーは "{'1627207:28320' => 'text'、 'key2' => 'text2'}"という文字列を渡すことができます。その後、エラー: 'ArgumentError:Hashの引数が奇数である \t(irb):' [] ' – mpz

+0

その後、正規表現で分割することができます。コードが編集されました。 – steenslag

0

かなりまっすぐ進む:異なる入力用

$ 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> 
+0

しかし、文字列を解析せず、変数からハッシュを作成するだけです –

+0

彼はどのような構文解析をしていますか?彼の例では、彼はテキストからハッシュになります。彼がハッシュのように見える文字列を取得した場合、Grzegorzは指摘したように、構文解析が必要です – Miquel

+0

彼は '' {some_key '=>' value '} ''の文字列を取得しますが、 '' {' first '=> 1、 'second' => 2} "'、両方の文字列にハッシュが含まれているためです。そのため、すべての文字列をハッシュに変換できるコードが必要です –

2
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"} 

EDIT:短いバージョンを

class String 
    def to_h 
    Hash[self.scan(/'([^']+)'=>'([^']+)'/)] 
    end 
end 
+0

は '' {'key' => 'texttext'} ''のために働いていましたが、 '' {'key' => 'text text'} "' " – mpz

+0

にはうまくいきません。 inpoutを処理する必要があります。短いバージョンをchar 'をデリミタとして検索します – peter

0

あなたは、単にこれを試みることができる:

text_hash['1627207:28320'] = 'text' 
text_hash 
関連する問題