2

データをシリアル化するクラスがあります。このデータをJSONまたはおそらくYAMLとしてシリアル化したいと思うかもしれません。この場合、YAMLをJSONオブジェクトときれいに交換できますか?私は次のようなことができると思っていました。それは夢の裏切りですか?

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

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

2 に答える 2

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
于 2010-07-31T09:38:55.460 に答える
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
于 2010-07-31T07:36:49.983 に答える