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?
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"}
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"
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.
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 ..
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]