Je voudrais faire quelque chose comme ceci:Comment convertir un objet Ruby à JSON
require 'json'
class Person
attr_accessor :fname, :lname
end
p = Person.new
p.fname = "Mike"
p.lname = "Smith"
p.to_json
Est-il possible?
Je voudrais faire quelque chose comme ceci:Comment convertir un objet Ruby à JSON
require 'json'
class Person
attr_accessor :fname, :lname
end
p = Person.new
p.fname = "Mike"
p.lname = "Smith"
p.to_json
Est-il possible?
Essayez-le. Si vous utilisez Ruby on Rails (et les tags disent que vous êtes), je pense que ce code exact devrait déjà fonctionner, sans rien exiger. Rails prend en charge la sortie JSON des contrôleurs. Il prend donc en charge tout le code de sérialisation JSON dont vous aurez besoin. Si vous envisagez de sortie de ces données par un contrôleur, vous pourriez être en mesure de gagner du temps en écrivant simplement
render :json => @person
Oui, vous pouvez le faire avec to_json
.
Vous devrez peut-être require 'json'
si vous n'exécutez pas Rails.
Avec Rails, il n'est pas nécessaire d'utiliser 'require 'json'', mais avec un code Ruby régulier, cela sera probablement nécessaire. [JSON fait partie de la bibliothèque standard de Ruby] (https://ruby-doc.org/stdlib/libdoc/json/rdoc/index.html) donc il vient avec la langue. –
Pour rendre votre classe Ruby JSON-friendly sans toucher Rails, vous souhaitez définir deux méthodes:
to_json
, qui retourne un objet JSONas_json
, qui retourne une représentation de hachage de l'objetlorsque votre objet répond correctement à la fois to_json
et as_json
, il peut se comporter correctement, même quand il est niché au plus profond d'autres classes standard comme matrice et/ou Hash:
#!/usr/bin/env ruby
require 'json'
class Person
attr_accessor :fname, :lname
def as_json(options={})
{
fname: @fname,
lname: @lname
}
end
def to_json(*options)
as_json(*options).to_json(*options)
end
end
p = Person.new
p.fname = "Mike"
p.lname = "Smith"
# case 1
puts p.to_json # output: {"fname":"Mike","lname":"Smith"}
# case 2
puts [p].to_json # output: [{"fname":"Mike","lname":"Smith"}]
# case 3
h = {:some_key => p}
puts h.to_json # output: {"some_key":{"fname":"Mike","lname":"Smith"}}
puts JSON.pretty_generate(h) # output
# {
# "some_key": {
# "fname": "Mike",
# "lname": "Smith"
# }
# }
Voir aussi "Using custom to_json method in nested objects".
Qu'est-ce que la personne a des associations? – Sash
Cette réponse ne s'applique qu'aux projets Rails. Qu'en est-il de la vanille Ruby? – cevaris
Je dirais qu'il ne s'applique même pas à Rails .. il ne s'applique qu'au contrôleur dans une application rails ... portée très limitée. – baash05