Как разобрать файл yaml в хэши и / или массивы ruby? - PullRequest
32 голосов
/ 14 августа 2010

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

Ответы [ 4 ]

99 голосов
/ 14 августа 2010

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

hash = YAML.load(File.read("file_path"))
13 голосов
/ 14 августа 2010

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

11 голосов
/ 13 июля 2017

Более простой вариант ответа venables:

hash = YAML.load_file("file_path")
2 голосов
/ 22 июля 2016

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...