ruby - tutorial - rails jbuilder api




Converter json para ruby hash (4)

E o seguinte trecho?

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

Eu tenho um objeto JSON segurando o seguinte valor:

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

Eu quero percorrê-lo em Ruby para obter os pares de valores-chave. Quando eu uso @each , ele não itera através do objeto porque não está no formulário de hash do ruby:

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

Como posso converter o objeto JSON acima para o hash Ruby?


Supondo que você tenha um hash JSON pendurado em algum lugar, para convertê-lo automaticamente em algo como a versão do WarHog, coloque o conteúdo do hash json em% q {hsh} tags. Isto parece adicionar automaticamente todo o texto de escape necessário, como na resposta do WarHog


Você pode usar a gem nice_hash: 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]

Você também pode usar o método de ruby: with_indifferent_access para que você possa acessar o corpo com símbolos ou strings.

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

então

json[:val] #=> "test"

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




hashmap