Как преобразовать объект Ruby в JSON

Я хотел бы сделать что-то вроде этого:

require 'json'

class Person
attr_accessor :fname, :lname
end

p = Person.new
p.fname = "Mike"
p.lname = "Smith"

p.to_json

Возможно ли это?

Ответ 1

Да, вы можете сделать это с помощью to_json.

Вам может понадобиться require 'json', если вы не используете Rails.

Ответ 2

Попробуйте. Если вы используете Ruby on Rails (и теги говорят, что вы есть), я думаю, что этот точный код должен работать уже, не требуя ничего.

Rails поддерживает вывод JSON из контроллеров, поэтому он уже втягивает весь код сериализации JSON, который вам когда-либо понадобится. Если вы планируете выводить эти данные через контроллер, вы можете сэкономить время, просто написав

render :json => @person

Ответ 3

Чтобы сделать ваш класс Ruby JSON удобным, не касаясь Rails, вы бы определили два метода:

  • to_json, который возвращает объект JSON
  • as_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 во вложенных объектах.

Ответ 4

Чтобы сделать json в ruby, существует два метода конвертации в формат Json. Пожалуйста, обратитесь по ссылке ниже.

Json в рубине на рельсах