WhatsthesimplestmethodtoconvertYAMLtodot-separatedstringsinRuby?在Ruby中,将YAML转换为点分隔字符串的最 What's the simplest method to convert YAML to dot-separated strings in Ruby? 在Ruby中,将YAML转换为点分隔字符串的
What's the simplest method to convert YAML to dot-separated strings in Ruby?
在Ruby中,将YAML转换为点分隔字符串的最简单方法是什么?
So this:
所以这个:
root: child_a: Hello child_b: nested_child_a: Nesting nested_child_b: Nesting Again child_c: KTo this:
:
{ "ROOT.CHILD_A" => "Hello", "ROOT.CHILD_B.NESTED_CHILD_A" => "Nesting", "ROOT.CHILD_B.NESTED_CHILD_B" => "Nesting Again", "ROOT.CHILD_C" => "K"}1 个解决方案
#1
12
It's not a one-liner, but perhaps it will fit your needs
这不是一句俏皮话,但也许它会适合你的需要
def to_dotted_hash(source, target = {}, namespace = nil) prefix = "#{namespace}." if namespace case source when Hash source.each do |key, value| to_dotted_hash(value, target, "#{prefix}#{key}") end when Array source.each_with_index do |value, index| to_dotted_hash(value, target, "#{prefix}#{index}") end else target[namespace] = source end targetendrequire 'pp'require 'yaml'data = YAML.load(DATA)pp datapp to_dotted_hash(data)__END__root: child_a: Hello child_b: nested_child_a: Nesting nested_child_b: Nesting Again child_c: Kprints
打印
{"root"=> {"child_a"=>"Hello", "child_b"=>{"nested_child_a"=>"Nesting", "nested_child_b"=>"Nesting Again"}, "child_c"=>"K"}} {"root.child_c"=>"K", "root.child_b.nested_child_a"=>"Nesting", "root.child_b.nested_child_b"=>"Nesting Again", "root.child_a"=>"Hello"}