我正在学习如何使用JSON gem解析和生成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
方法,或者建议更好的方法来实现它吗?谢谢!
答案 0 :(得分:12)
首先,您需要确保使用正确的基本结构:
def to_json(*a)
{
'json_class' => self.class.name,
'data' => Your data
}.to_json(*a)
end
JSON gem使用json_class
键来确定将数据传递给哪个类。 *a
参数包含JSON gem传入的所有参数,对于您的类通常不重要,因此您只需将其直接传递给哈希的to_json
调用。接下来,存储数据的最简单方法是散列或数组:
'data' => [@name, @age, @address]
或
'data' => { 'name' => @name, 'age' => @age, 'address' => @address
第一个可能更快,并且使self.json_create
方法更容易编写,而第二个更容易向后兼容,如果您更改数据结构并希望加载旧的JSON对象。