2011-01-23 14 views
5

JSONの宝石を使用してJSONを解析して生成する方法を学習しています。私は簡単にデータのハッシュを作成し、それをJSONに生成することができます。しかし、クラスのインスタンス(Personインスタンスなど)を取得し、そのインスタンス変数をすべてJSONに変換するためのハッシュの中に入れることについては、私は頭がおかしくなります。JSON gemを使用してカスタムオブジェクトを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 

は私が人のオブジェクトを取得し、JSONに変換し、そのインスタンス変数のすべてを持つことができるように.to_jsonメソッドを作成したい:

この

は、私は問題を抱えています例です。私がする必要があると思うのは、Personのすべてのインスタンス変数をとり、ハッシュに入れて JSON.generate(hash)と呼ぶことです。私は今、それをどうやって行うのかについての脳のおならを持っています。だから、誰かが私が to_jsonメソッドを完了するのを手伝ったり、それを実装するより良い方法を提案したりすることができますか?ありがとう!

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

json_classキーはにデータを渡すためにどのようなクラスを決定するためにJSONの宝石で使用されます。

+0

既にヘルパーがあなたのために行われているRailsを使用していて、簡単に '​​.to_hash'または'​​.to_json'を実行することができます。私のソースの 'author_list'アクションを見てください:https://github.com/shybovychych/strong-sword/blob/master/app/controllers/quotes_controller.rb#L29 – shybovycha

答えて

11

まず、あなたは右の基本的な構造を使用することを確認する必要があります。 *aパラメータには、JSON gemが渡しているすべての引数が含まれます。通常はクラスにとって重要ではないため、ハッシュのto_json呼び出しにそのまま渡します。あなたのデータを格納するための最も簡単な方法は、ハッシュや配列されている次へ:

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

または

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

最初は速いかもしれないと第二がある一方で、書くことがself.json_create方法が少し容易になりますデータ構造を変更して古いJSONオブジェクトをロードしたい場合は、以前のバージョンと互換性があります。

関連する問題