データをシリアル化するクラスがあります。このデータを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