我有一个序列化数据的类。我可能想将这些数据序列化为JSON,或者也许是YAML。在这种情况下,我可以干净地交换YAML for JSON对象吗?我希望我可以做类似以下的事情。这是一个梦想吗?
FORMATS = {
:json => JSON,
:yaml => YAML,
}
def serialize(data, format)
FORMATS[format].serialize(data)
end
答案 0 :(得分:2)
如果类JSON
和YAML
都具有名为serialize
的类方法,那么您编写的代码应该可以正常工作。但我认为实际存在的方法是#dump
。
所以,你会:
require 'json'
require 'yaml'
FORMATS = {
:json => JSON,
:yaml => YAML,
}
def serialize(data, format)
FORMATS[format].dump(data)
end
hash = {:a => 2}
puts serialize hash, :json
#=> {"a":2}
puts serialize hash, :yaml
#=> ---
#=> :a: 2
答案 1 :(得分:0)
如果JSON
和YAML
是已存在的类或模块,您可以写:
FORMATS = { :json => "JSON", :yaml => "YAML" }
def serialize(data, format)
Kernel.const_get(FORMATS[format]).serialize(data) # 'serialize' is a class method in this case
end