2

我有一个序列化数据的类。我可能想将此数据序列化为 JSON 或 YAML。在这种情况下,我可以干净地将 YAML 换成 JSON 对象吗?我希望我能做类似下面的事情。这是白日梦吗?

FORMATS = {
  :json => JSON,
  :yaml => YAML,
}

def serialize(data, format)
  FORMATS[format].serialize(data)
end
4

2 回答 2

2

您编写的代码应该可以正常工作,前提是类JSONYAML两者都有名为的类方法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
于 2010-07-31T09:38:55.460 回答
0

如果JSONYAML是已经存在的类或模块,您可以编写:

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
于 2010-07-31T07:36:49.983 回答