我需要将一个yaml文件加载到Hash中,
我该怎么办?
答案 0 :(得分:97)
我会使用类似的东西:
hash = YAML.load(File.read("file_path"))
答案 1 :(得分:14)
使用YAML模块:
http://ruby-doc.org/stdlib-1.9.3/libdoc/yaml/rdoc/YAML.html
node = YAML::parse( <<EOY )
one: 1
two: 2
EOY
puts node.type_id
# prints: 'map'
p node.value['one']
# prints key and value nodes:
# [ #<YAML::YamlNode:0x8220278 @type_id="str", @value="one", @kind="scalar">,
# #<YAML::YamlNode:0x821fcd8 @type_id="int", @value="1", @kind="scalar"> ]'
# Mappings can also be accessed for just the value by accessing as a Hash directly
p node['one']
# prints: #<YAML::YamlNode:0x821fcd8 @type_id="int", @value="1", @kind="scalar">
http://yaml4r.sourceforge.net/doc/page/parsing_yaml_documents.htm
答案 2 :(得分:10)
更简单的venables版本&#39;回答:
hash = YAML.load_file("file_path")
答案 3 :(得分:2)
您可能会遇到regular expression中提到的问题,即YAML文件或流指定YAML加载程序将尝试将数据转换为的对象。问题是你需要一个知道相关对象的相关Gem。
我的解决方案非常简单,可作为该问题的答案。这样做:
yamltext = File.read("somefile","r")
yamltext.sub!(/^--- \!.*$/,'---')
hash = YAML.load(yamltext)
本质上,您从yaml-text中剥离对象分类器文本。然后你解析/加载它。