Преобразование пользовательского объекта в JSON с использованием гема JSON - PullRequest
5 голосов
/ 23 января 2011

Я учусь анализировать и генерировать JSON с помощью гема JSON.Я легко могу создать хэш данных и сгенерировать их в JSON;тем не менее, у меня возникает пердеж, когда дело доходит до того, чтобы взять экземпляр класса (например, экземпляр Person) и поместить все переменные его экземпляра в хеш для преобразования в JSON.пример У меня возникли проблемы с:

require "json"

class Person

  def initialize(name, age, address)
    @name = name
    @age = age
    @address = address
  end

  def to_json

  end


end

p = Person.new('John Doe', 46, "123 Elm Street")
p.to_json

Я хочу создать метод .to_json, чтобы я мог взять объект person и преобразовать все его переменные экземпляра в JSON.Я думаю, что мне нужно сделать, это взять все переменные экземпляра Person, поместить их в хеш, а затем вызвать JSON.generate(hash).У меня есть мозг пердеть о том, как сделать это прямо сейчас.Так может кто-нибудь помочь мне завершить метод to_json, или, возможно, предложить лучший способ его реализации?Спасибо!

1 Ответ

12 голосов
/ 23 января 2011

Сначала нужно убедиться, что вы используете правильную базовую структуру:

def to_json(*a)
  {
    'json_class'   => self.class.name,
    'data'         => Your data
  }.to_json(*a)
end

Ключ json_class используется гемом JSON, чтобы определить, в какой класс передавать данные. Параметр *a включает в себя все аргументы, передаваемые гемом JSON, обычно не важными для ваших классов, поэтому вы просто передаете его прямо в вызов хеша to_json. Далее самые простые способы хранения ваших данных - это хеш или массив:

    'data'         => [@name, @age, @address]

или

    'data'         => { 'name' => @name, 'age' => @age, 'address' => @address

Первый может быть быстрее и немного облегчает написание метода self.json_create, а второй намного проще сделать обратно совместимым, если вы когда-либо измените структуру данных и захотите загрузить старые объекты JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...