我有一个简单的类,它会覆盖to_json以列出数组中的属性 -
class MyClass
def initialize(a, b)
@a = a
@b = b
end
def to_json(*opt)
[@a, @b].to_json(*opt)
end
end
to_json适用于类的实例 -
irb> m = MyClass.new(10, "abc")
irb> m.to_json
=> "[10,\"abc\"]"
但是如果我把对象放在一个数组中,我的自定义to_json就不会被调用 -
irb> [m].to_json
=> "[{\"a\":10,\"b\":\"abc\"}]"
我希望得到以下输出 -
=> "[[10,\"abc\"]]"
另一个例子 - 如果我创建另一个包含第一个实例的实例
irb> m2 = MyClass.new(20, m)
irb> m2.to_json
=> "[20,{\"a\":10,\"b\":\"abc\"}]"
我期待的是
=> "[20,[10,\"abc\"]]"
看起来to_json没有被递归调用。怎么解决这个问题?
一如既往地感谢!!
这似乎在Ruby 1.9.1上按预期工作。谢谢Mladen!
我需要使用1.8.7。
答案 0 :(得分:0)
丑陋的黑客让它在Ruby 1.8.7上运行,直到有人提出更好的方法:
e.g。 Hash.from_xml(m2.to_xml)["objects"].to_json