ruby-on-rails - respond - ruby read json
Cómo convertir un objeto Ruby a JSON (3)
Intentalo. Si estás usando Ruby on Rails (y las etiquetas dicen que lo estás), 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 incluye todo el código de serialización JSON que necesitará. Si planea generar estos datos a través de un controlador, puede ahorrar tiempo simplemente escribiendo
render :json => @person
Me gustaría hacer algo como esto:
require ''json''
class Person
attr_accessor :fname, :lname
end
p = Person.new
p.fname = "Mike"
p.lname = "Smith"
p.to_json
¿Es posible?
Para hacer que tu clase Ruby sea compatible con JSON sin tocar Rails, definirías dos métodos:
-
to_json
, que devuelve un objeto JSON -
as_json
, que devuelve una representación hash del objeto
Cuando su objeto responde correctamente tanto a to_json
como a as_json
, puede comportarse correctamente incluso cuando está anidado en otras clases estándar como Array 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"
# }
# }
Consulte también " Uso del método to_json personalizado en objetos anidados ".
Sí, puedes hacerlo con to_json
.
Es posible que deba require ''json''
si no está ejecutando Rails.