web-dev-qa-db-fra.com

Convertir de JSON en Ruby Hash

J'ai un objet JSON contenant la valeur suivante:

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

Je veux parcourir Ruby pour obtenir les paires clé-valeur. Lorsque j'utilise @each, il ne parcourt pas l'objet car il ne se trouve pas sous la forme de hachage Ruby:

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

Comment convertir l'objet JSON ci-dessus en objet de hachage Ruby? 

119
verdure

Qu'en est-il de l'extrait suivant?

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

Vous pouvez également utiliser la méthode de Ruby: with_indifferent_access pour pouvoir accéder au corps avec des symboles ou des chaînes.

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

puis 

json[:val] #=> "test"

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

En supposant que votre hachage JSON traîne quelque part, pour le convertir automatiquement en une version semblable à la version de WarHog, enveloppez le contenu de votre hachage Json dans les balises% q {hsh}. Cela semble ajouter automatiquement tout le texte échappé nécessaire, comme dans la réponse de WarHog.

3
boulder_ruby

Avez-vous essayé: http://flori.github.com/json/ .

En cas d'échec, vous pourriez simplement l'analyser? Si ce n’est que les tableaux qui vous intéressent, il est très simple de scinder ce qui précède sera simple ..

2
Nick Cartwright

Vous pouvez utiliser le joyau 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]
0
Mario Ruiz