Comment convertir un objet de hachage Ruby en JSON? Donc, j'essaie cet exemple ci-dessous et cela ne fonctionne pas?
Je regardais l'objet RubyDoc et, évidemment, l'objet Hash
n'a pas de méthode to_json
. Mais je lis sur les blogs que Rails prend en charge active_record.to_json
et prend également en charge hash#to_json
. Je peux comprendre que ActiveRecord
soit un objet Rails, mais Hash
n’est pas natif de Rails, c’est un pur objet Ruby. Donc, dans Rails, vous pouvez faire un hash.to_json
, mais pas en pur Ruby ??
car = {:make => "bmw", :year => "2003"}
car.to_json
L'une des nombreuses subtilités de Ruby est la possibilité d'étendre les classes existantes avec vos propres méthodes. C'est ce qu'on appelle "la réouverture de classe" ou la correction de singe (la signification de ce dernier peut varier , cependant).
Alors, jetez un coup d'oeil 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, exiger json
a introduit magiquement la méthode to_json
dans notre Hash
.
require 'json/ext' # to use the C based extension instead of json/pure
puts {hash: 123}.to_json
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\"}"
Vous devez inclure json
dans votre fichier
Par exemple,
require 'json'
your_hash = {one: "1", two: "2"}
your_hash.to_json
Pour plus d'informations sur json
, vous pouvez visiter le lien ci-dessous . Json Learning