Я хотел бы сделать что-то вроде этого:
require 'json'
class Person
attr_accessor :fname, :lname
end
p = Person.new
p.fname = "Mike"
p.lname = "Smith"
p.to_json
Возможно ли это?
Я хотел бы сделать что-то вроде этого:
require 'json'
class Person
attr_accessor :fname, :lname
end
p = Person.new
p.fname = "Mike"
p.lname = "Smith"
p.to_json
Возможно ли это?
Да, вы можете сделать это с помощью to_json
.
Вам может понадобиться require 'json'
, если вы не используете Rails.
Попробуйте. Если вы используете Ruby on Rails (и теги говорят, что вы есть), я думаю, что этот точный код должен работать уже, не требуя ничего.
Rails поддерживает вывод JSON из контроллеров, поэтому он уже втягивает весь код сериализации JSON, который вам когда-либо понадобится. Если вы планируете выводить эти данные через контроллер, вы можете сэкономить время, просто написав
render :json => @person
Чтобы сделать ваш класс Ruby JSON удобным, не касаясь Rails, вы бы определили два метода:
to_json
, который возвращает объект JSONas_json
, который возвращает хэш-представление объектаКогда ваш объект правильно реагирует на to_json
и as_json
, он может вести себя корректно, даже если он вложен глубоко внутри других стандартных классов, таких как Array и/или 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"
# }
# }
Также см. "Использование пользовательского метода to_json во вложенных объектах.
Чтобы сделать json в ruby, существует два метода конвертации в формат Json. Пожалуйста, обратитесь по ссылке ниже.