我需要加載一個yaml文件到Hash,
我該怎麼辦?如何將yaml文件解析爲ruby哈希和/或數組?
回答
使用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
這往往會返回Syck :: Map(或類似的對象),而不是哈希值。任何方式讓它返回(或轉換爲)一個普通的紅寶石哈希? – elsurudo 2013-04-21 19:37:13
我會使用類似:
hash = YAML.load(File.read("file_path"))
同樣在Ruby 2.2中,符號是GC'd。 – Kris 2015-05-26 13:05:21
[我的答案](https://stackoverflow.com/a/45068104/3042952)是基於這個,除了它使它更簡單,並且通過使用YAML.load_file來代替更具可讀性。 – 2017-08-29 19:44:28
您可能會遇到在this related question,即提到一個問題,那YAML文件或流指定YAML加載器將嘗試訪問的對象將數據轉換爲。問題是你需要一個相關的Gem來了解有關的對象。
我的解決方案非常簡單,並作爲該問題的答案提供。這樣做:
yamltext = File.read("somefile","r")
yamltext.sub!(/^--- \!.*$/,'---')
hash = YAML.load(yamltext)
本質上,您從yaml文本中剝離了對象分類器文本。然後你解析/加載它。
一個簡單的版本維納布爾斯回答:
hash = YAML.load_file("file_path")
- 1. Ruby - 將文件解析爲哈希
- 2. 解析哈希和數組
- 3. 如何解析這個哈希數組?
- 4. 如何從CSV文件解析哈希哈希
- 5. 將遞歸哈希解析爲Ruby中的數據記錄
- 6. 根據哈希Ruby中的數組數據將哈希分解爲重複哈希?
- 7. 如何解析yaml文件?
- 8. ruby YAML解析編號爲
- 9. Ruby中的數組或哈希
- 10. 我該如何將這個Ruby哈希轉換爲數組?
- 11. MoSql和YAML解析:無效的有序哈希進入
- 12. Ruby/Slim:從YAML文件中解析Markdown
- 13. Perl解析數組散列的哈希
- 14. 如何將哈希數組推送到哈希數組?
- 15. Ruby:添加哈希/合併YAML對象
- 16. Ruby:將哈希插入數組?
- 17. 解析配置文件,並轉換成數組嵌套哈希
- 18. 在Ruby中操作哈希和數組
- 19. Ruby:如何從文件加載哈希?
- 20. 如何將哈希鍵數組的python哈希轉換爲數組?
- 21. 如何將數據保存到多維Ruby哈希,然後將哈希轉換爲單個JSON文件?
- 22. 如何獲取XML頁面並將其解析爲Rails中的Ruby哈希?
- 23. JSON文件到Ruby哈希
- 24. 用perl解析YAML文件。如何訪問和解析不同的yaml對象。
- 25. 將數組轉換爲哈希數組
- 26. 將哈希數組轉換爲數組
- 27. 轉換散列哈希數組Ruby Ruby
- 28. 如何將一個數組轉換爲哈希鍵和另一個數組轉換爲相同哈希的值?
- 29. 如何使用XmlSimple將哈希解析爲XML?
- 30. 如何解析csv字符串並將其轉換爲哈希
請更新您選擇的答案。您選擇的那個不會回答您的實際問題(不管它是否更具信息性) – Volte 2014-04-11 16:08:20