您需要解析文件以获取节点表示:
yml = YAML.parse( open('c:\temp\foo.yml'))
该yml
变量包含整个结构。示例:键入以下内容将打印实际的整个文件内容
pp yml
检查结果后,我能够编写一个安全的序列化程序。添加一个名为config/initializers/yaml.rb
module YAML
def YAML.safe_load(file_name)
YAML::safe_load_node(YAML::parse(IO.read(file_name)))
end
def YAML.safe_load_node(input)
case input.kind
when :map
{}.tap do |h|
input.value.each do |key, node|
k,v = key.value, YAML::safe_load_node(node)
if (v.is_a?(Hash) and h[k].is_a?(Hash))
h[k] = h[k].merge(v)
elsif (v.is_a?(Array) and h[k].is_a?(Array))
h[k] = h[k] + v
else
h[k] = v
end
end
end
when :seq
input.value.map{|node| YAML::safe_load_node(node)}
when :scalar
input.value
end
end
end
现在在 Rails 控制台中:
>> y YAML::safe_load('c:/temp/test.yml')
---
en:
christmas:
ham: Bring ham
thanksgiving:
turkey: Turkey
stuffing: Stuffing
beer: lots of beer