403 votes

Comment convertir un objet de hachage ruby en JSON ?

Comment convertir un objet de hachage ruby en JSON ? J'essaie l'exemple ci-dessous et cela ne fonctionne pas ?

Je regardais le RubyDoc et évidemment Hash n'a pas d'objet to_json méthode. Mais je lis sur des blogs que Rails supporte active_record.to_json et prend également en charge hash#to_json . Je peux comprendre ActiveRecord est un objet Rails, mais Hash n'est pas natif de Rails, c'est un pur objet Ruby. Ainsi, dans Rails, vous pouvez faire un hash.to_json mais pas en Ruby pur.

car = {:make => "bmw", :year => "2003"}
car.to_json

646voto

Mladen Jablanović Points 22082

L'un des nombreux avantages de Ruby est la possibilité d'étendre des classes existantes avec vos propres méthodes. Cela s'appelle la "réouverture de classe" ou monkey-Parcheando (la signification de ce dernier peut varier cependant).

Alors, jetez un coup d'œil ici :

car = {:make => "bmw", :year => "2003"}
# => {:make=>"bmw", :year=>"2003"}
car.to_json
# NoMethodError: undefined method `to_json' for {:make=>"bmw", :year=>"2003"}:Hash
#   from (irb):11
#   from /usr/bin/irb:12:in `<main>'
require 'json'
# => true
car.to_json
# => "{"make":"bmw","year":"2003"}"

Comme vous pouvez le constater, il faut json a magiquement apporté la méthode to_json à notre Hash .

2 votes

Tout ce que je peux dire c'est wow :) aussi merci beaucoup ! donc en gros j'ai pu étendre la classe json dynamiquement ? ??

1 votes

J'ai essayé la même chose avec l'objet Ruby et cela ne fonctionne pas . >> require 'json' => true >> class Person >> attr_accessor :fname, :lname >> end => nil >> p = Person.new => #<Person:0x101155f70> >> p.fname = "Bill" => "Bill" >> p.lname = "Shine" => "Shine" >> p.to_json => "\"#<Person:0x101155f70>\""

11 votes

Non, non, quelqu'un doit coder comment l'objet d'une classe arbitraire doit être sérialisé en JSON. Ils l'ont fait pour Hash y Array classes en json gemme, mais votre classe Person est juste un simple Object . Mais vous pouvez hériter Hash à la place. Vous pouvez ouvrir une nouvelle question si vous n'y arrivez pas.

22voto

nurettin Points 4083
require 'json/ext' # to use the C based extension instead of json/pure

puts {hash: 123}.to_json

19voto

vnbrs Points 1255

Vous pouvez également utiliser JSON.generate :

require 'json'

JSON.generate({ foo: "bar" })
=> "{\"foo\":\"bar\"}"

Ou son alias, JSON.unparse :

require 'json'

JSON.unparse({ foo: "bar" })
=> "{\"foo\":\"bar\"}"

18voto

Apurv Pandey Points 49

Ajoutez la ligne suivante en haut de votre fichier

require 'json'

Alors vous pouvez utiliser :

car = {:make => "bmw", :year => "2003"}
car.to_json

Alternativement, vous pouvez utiliser :

JSON.generate({:make => "bmw", :year => "2003"})

-1voto

Foram Points 335

Vous devez inclure json dans votre fichier

Par exemple,

require 'json'

your_hash = {one: "1", two: "2"}
your_hash.to_json

Pour en savoir plus sur json vous pouvez visiter le lien ci-dessous. Apprentissage de Json

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X