将Ruby对象序列化为JSON并返回?

时间:2010-12-31 09:41:19

标签: ruby json serialization

我想将一个对象序列化为JSON,将其写入文件并将其读回。现在我期待像.net那样你有json.net之类的东西,你可以这样做:

JsonSerializer.Serialize(obj);

并完成它。你得到了JSON字符串。

我如何在Ruby中执行此操作?没有Rails,没有ActiveRecord,没有任何东西。有没有我找不到的宝石?

我安装了JSON gem并调用:

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>"]

我做错了什么?

1 个答案:

答案 0 :(得分:14)

最简单的方法是制作to_json方法和json_create方法。在您的情况下,您可以这样做:

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

然后通过调用JSON.dump(obj)序列化并使用JSON.parse(obj)反序列化。 to_json中哈希的数据部分可以是任何内容,但我喜欢将其保留为new / initialize将获得的参数。如果您需要保存其他内容,则应将其放在此处并以某种方式解析并在json_create中设置。