2010-12-31 10 views
4

JSONにオブジェクトをシリアル化し、ファイルに書き込んで読み戻したいと思っています。RubyオブジェクトをJSONにシリアル化して戻しますか?

JsonSerializer.Serialize(obj); 

し、それを使って行うこと:今、私はあなたがjson.netまたはそのような何かとあなたがしている.NETのようなものを期待したいです。 JSON文字列を取得します。

Rubyでこれを行うにはどうすればよいですか?レールなし、ActiveRecordなし、何もありません。見つけられない宝石はありますか?

puts JSON.generate([obj]) 

objがオブジェクトのようなものです::

class CrawlStep 

    attr_accessor :id, :name, :next_step 

    def initialize (id, name, next_step) 
    @id = id 
    @name = name 
    @next_step = next_step 
    end 
end 

obj = CrawlStep.new(1, 'step 1', CrawlStep.new(2, 'step 2', nil)) 

すべて私が帰ってもらう:

["#<CrawlStep:0x00000001270d70>"] 

私は何をやっている

私はJSONの宝石と呼ばをインストール違う?

答えて

14

最も簡単な方法は、to_jsonメソッドとjson_createメソッドを作成することです。そして、あなたがJSON.dump(obj)を呼び出すことでシリアライズしJSON.parse(obj)とアンシリアライズ

class CrawlStep 
    # Insert your code here (attr_accessor and initialize) 

    def self.json_create(o) 
    new(*o['data']) 
    end 

    def to_json(*a) 
    { 'json_class' => self.class.name, 'data' => [id, name, next_step] }.to_json(*a) 
    end 
end 

:あなたのケースでは、あなたがこれを行うことができます。 to_jsonのハッシュのデータ部分は何でもかまいませんが、私はnew/initializeが得られるパラメータに保つのが好きです。保存する必要があるものがあれば、ここに入れて何らかの理由でそれを解析してjson_createに設定する必要があります。

+0

素晴らしい作品です。ありがとうございます。 – sirrocco

+1

jsonの宝石のソースを見て、create_additionsを 'true'に設定してオプションのハッシュを渡さなければならないことが分かったところで、これは私にとってはうまくいかなかった。例えば'JSON.parse(obj、create_additions:true)'または 'JSON.load(str、nil、create_additions:true)'を返します。それ以外の場合は、デフォルトでfalseに設定されます。これは少なくともバージョン1.5.5の場合です – cjross

関連する問題