web-dev-qa-db-ja.com

yamlファイルをRubyハッシュおよび/または配列に解析する方法は?

Yamlファイルをハッシュにロードする必要があります。
私は何をすべきか?

33
Croplio

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

13

私は次のようなものを使用します:

hash = YAML.load(File.read("file_path"))
100
venables

Venablesの答えのより簡単なバージョン:

hash = YAML.load_file("file_path")
12

この関連する質問 で言及されている問題に遭遇する可能性があります。つまり、YAMLファイルまたはストリームが、YAMLローダーがデータを変換しようとするオブジェクトを指定するということです。問題は、問題のオブジェクトについて知っている関連Gemが必要になることです。

私の解決策は非常に簡単で、その質問に対する答えとして提供されています。これを行う:

yamltext = File.read("somefile","r")
yamltext.sub!(/^--- \!.*$/,'---')
hash = YAML.load(yamltext)

本質的に、yaml-textからobject-classifierテキストを取り除きます。次に、それを解析/ロードします。

2
Otheus