1. ホーム
  2. ruby

[解決済み] StringオブジェクトをHashオブジェクトに変換するにはどうすればよいですか?

2022-05-12 04:57:04

質問

ハッシュのような文字列があります。

"{ :key_a => { :key_1a => 'value_1a', :key_2a => 'value_2a' }, :key_b => { :key_1b => 'value_1b' } }"

どうやったらハッシュが出るの? みたいな。

{ :key_a => { :key_1a => 'value_1a', :key_2a => 'value_2a' }, :key_b => { :key_1b => 'value_1b' } }

文字列は任意の深さのネストを持つことができます。これはRubyで有効なHashがどのように型付けされるかのすべての特性を持っています。

解決方法は?

を呼び出して作成した文字列は Hash#inspect を呼び出すと、ハッシュに戻すことができます。 eval をつける。ただし、この場合、ハッシュの中のすべてのオブジェクトが同じであることが必要です。

もし私がハッシュ {:a => Object.new} であれば、その文字列表現は "{:a=>#<Object:0x7f66b65cf4d0>}" を使用することはできません。 eval を使ってハッシュに戻すことができます。 #<Object:0x7f66b65cf4d0> はRubyの有効な構文ではありません。

しかし、ハッシュの中身が文字列、記号、数値、配列であれば、Rubyの有効な構文である文字列表現を持つので、動作するはずです。