#!/usr/bin/env ruby
require 'json'
class A
def to_json(*a)
{ :a => 'a' }.to_json(*a)
end
end
class B < A
def to_json(*a)
super({ :b => 'b' })
end
end
puts B.new.to_json
产生
{"a":"a"}
如何制作
{"a":"a", "b":"b"}
以合理的方式?
我正在使用Ruby 1.9.3和最新的json gem。
一个相关的问题是:to_json的参数是什么?我搜索过的文档无济于事。
答案 0 :(得分:1)
我最终得到了一个不同的方法json_map。
#!/usr/bin/env ruby
require 'json'
class A
def to_json(*a)
json_map.to_json(*a)
end
def json_map
{ :a => 'a' }
end
end
class B < A
def json_map
map = super
map[:b] = 'b'
map
end
end
puts B.new.to_json
也许有一个更美丽的解决方案,但这很有效。
答案 1 :(得分:1)
在两个类中有两个哈希{:a=>'a'}
和{:b=>'b'}
,它们被封装,即从外部世界隐藏。我能看到的唯一方法是将json字符串解析为hash并合并它们,然后将结果转换为json。
class B < A
def to_json(*a)
JSON.parse(super).merge({:b=>'b'}).to_json
end
end
但是这里差异很小:你正在合并{:a=>'a',:b=>'b'}
并得到{"a":"a","b":"b"}
*a
是为json格式设置选项的参数