web-dev-qa-db-fra.com

Comment analyser un fichier yaml en Ruby hachages et / ou tableaux?

J'ai besoin de charger un fichier yaml dans Hash,
Que devrais-je faire?

33
Croplio

Utilisez le module 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
NullUserException

J'utiliserais quelque chose comme:

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

Une version plus simple de la réponse de venables:

hash = YAML.load_file("file_path")
12
Duncan X Simpson

Vous pouvez rencontrer un problème mentionné à cette question connexe , à savoir que le fichier ou flux YAML spécifie un objet dans lequel le chargeur YAML tentera de convertir les données. Le problème est que vous aurez besoin d'un Gem apparenté qui connaît l'objet en question.

Ma solution était assez banale et est fournie comme réponse à cette question. Faites ceci:

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

En substance, vous supprimez le texte du classificateur d'objets du texte yaml. Ensuite, vous l'analysez/chargez.

2
Otheus