Подтвердить что ты не робот

Как анализировать файл yaml в хэш-рубинах и/или массивах?

Мне нужно загрузить файл yaml в Hash,
Что мне делать?

4b9b3361

Ответ 1

Используйте модуль 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

Я бы использовал что-то вроде:

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

Ответ 3

Простейшая версия ответа на конкурс: {/p >

hash = YAML.load_file("file_path")

Ответ 4

Вы можете столкнуться с проблемой, упомянутой в этом связанном вопросе, а именно, что файл или поток YAML указывает объект, в который загрузчик YAML попытается преобразовать данные в. Проблема в том, что вам понадобится связанный Gem, который знает об объекте, о котором идет речь.

Мое решение было довольно тривиальным и представлено в качестве ответа на этот вопрос. Сделайте это:

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

По сути, вы удаляете текст объекта-классификатора из yaml-текста. Затем вы разобрали/загрузили его.