我有一个序列化数据的类。我可能想将此数据序列化为 JSON 或 YAML。在这种情况下,我可以干净地将 YAML 换成 JSON 对象吗?我希望我能做类似下面的事情。这是白日梦吗?
FORMATS = {
:json => JSON,
:yaml => YAML,
}
def serialize(data, format)
FORMATS[format].serialize(data)
end
我有一个序列化数据的类。我可能想将此数据序列化为 JSON 或 YAML。在这种情况下,我可以干净地将 YAML 换成 JSON 对象吗?我希望我能做类似下面的事情。这是白日梦吗?
FORMATS = {
:json => JSON,
:yaml => YAML,
}
def serialize(data, format)
FORMATS[format].serialize(data)
end
您编写的代码应该可以正常工作,前提是类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
如果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