我想将一个对象序列化为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>"]
我做错了什么?
答案 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
中设置。