web-dev-qa-db-ja.com

JSONをRubyハッシュに変換します

次の値を保持するJSONオブジェクトがあります。

@value = {"val":"test","val1":"test1","val2":"test2"}

Rubyでループして、キーと値のペアを取得します。 @eachを使用する場合、Rubyハッシュ形式ではないため、オブジェクトを反復処理しません。

@value = {"val"=>"test","val1"=>"test1","val2"=>"test2"}

上記のJSONオブジェクトをRubyハッシュに変換するにはどうすればよいですか?

127
verdure

次のスニペットはどうですか?

require 'json'
value = '{"val":"test","val1":"test1","val2":"test2"}'
puts JSON.parse(value) # => {"val"=>"test","val1"=>"test1","val2"=>"test2"}
238
WarHog

Railsのメソッドを使用することもできます。 with_indifferent_access を使用すると、シンボルまたは文字列で本体にアクセスできます。

value = '{"val":"test","val1":"test1","val2":"test2"}'
json = JSON.parse(value).with_indifferent_access

それから

json[:val] #=> "test"

json["val"] #=> "test"
28
crims345

JSONハッシュがどこかにぶら下がっていると仮定して、WarHogのバージョンのようなものに自動的に変換するには、jsonハッシュの内容を%q {hsh}タグでラップします。これは、WarHogの答えのように、必要なすべてのエスケープされたテキストを自動的に追加するようです

4
boulder_ruby

試しましたか: http://flori.github.com/json/

それに失敗すると、あなたはそれを解析することができますか?興味のある配列のみの場合、上記を分割するのは非常に簡単です。 N

3
Nick Cartwright

Nice_hash gemを使用できます: https://github.com/MarioRuiz/Nice_hash

require 'Nice_hash'
my_string = '{"val":"test","val1":"test1","val2":"test2"}'

# on my_hash will have the json as a hash, even when nested with arrays
my_hash = my_string.json

# you can filter and get what you want even when nested with arrays
vals = my_string.json(:val1, :val2)

# even you can access the keys like this:
puts my_hash._val1
puts my_hash.val1
puts my_hash[:val1]
0
Mario Ruiz