me gustaría hacer algo como esto:Cómo convertir un objeto Ruby a JSON
require 'json'
class Person
attr_accessor :fname, :lname
end
p = Person.new
p.fname = "Mike"
p.lname = "Smith"
p.to_json
¿Es posible?
me gustaría hacer algo como esto:Cómo convertir un objeto Ruby a JSON
require 'json'
class Person
attr_accessor :fname, :lname
end
p = Person.new
p.fname = "Mike"
p.lname = "Smith"
p.to_json
¿Es posible?
Pruébalo. Si utilizas Ruby on Rails (y las etiquetas dicen que lo eres), creo que este código exacto ya debería funcionar, sin requerir nada.
Rails admite la salida JSON de los controladores, por lo que ya incorpora todo el código de serialización JSON que siempre necesitará. Si usted está planeando para la producción de estos datos a través de un controlador, es posible que pueda ahorrar tiempo escribiendo
render :json => @person
Sí, puede hacerlo con to_json
.
Es posible que necesite require 'json'
si no está utilizando Rails.
Con Rails no es necesario usar 'require 'json'', pero con el código Ruby normal es probable que sea necesario. [JSON es parte de Ruby's Standard Library] (https://ruby-doc.org/stdlib/libdoc/json/rdoc/index.html) por lo que viene con el lenguaje. –
Para que su clase Rubí JSON-amigable sin tocar los carriles, que le define dos métodos:
to_json
, que devuelve un objeto JSONas_json
, que devuelve una representación de hash del objetocuando el objeto responde adecuadamente a la vez to_json
y as_json
, puede comportarse correctamente incluso cuando se anida en el interior de otras clases estándar como de la matriz y/o 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"
# }
# }
Ver también "Using custom to_json method in nested objects".
¿Qué es Person tiene asociaciones? – Sash
Esta respuesta solo se aplica a los proyectos de Rails. ¿Qué pasa con Vanilla Ruby? – cevaris
Diría que ni siquiera se aplica a Rails .. solo se aplica al controlador dentro de una aplicación de rieles .. alcance muy limitado. – baash05