如何将 yaml 文件解析为 ruby​​ 哈希和/或数组?

Posted

技术标签:

【中文标题】如何将 yaml 文件解析为 ruby​​ 哈希和/或数组?【英文标题】:How to parse a yaml file into ruby hashs and/or arrays? 【发布时间】:2011-03-29 17:47:13 【问题描述】:

我需要将 yaml 文件加载到哈希中, 我该怎么办?

【问题讨论】:

请更新您选择的答案。您选择的那个没有回答您的实际问题(无论它是否提供更多信息) 【参考方案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

【讨论】:

这往往会返回 Syck::Map(或类似对象),而不是哈希。有什么方法可以让它返回(或转换为)常规的 ruby​​ 哈希?【参考方案2】:

我会使用类似的东西:

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

【讨论】:

在 Ruby 2.2 中符号也是 GC'd。【参考方案3】:

您可能会遇到this related question 中提到的问题,即 YAML 文件或流指定了 YAML 加载器将尝试将数据转换为的对象。问题是您将需要一个了解相关对象的相关 Gem。

我的解决方案非常简单,作为该问题的答案提供。这样做:

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

本质上,您从 yaml 文本中剥离了对象分类器文本。然后你解析/加载它。

【讨论】:

【参考方案4】:

venables 回答的简单版本:

hash = YAML.load_file("file_path")

【讨论】:

以上是关于如何将 yaml 文件解析为 ruby​​ 哈希和/或数组?的主要内容,如果未能解决你的问题,请参考以下文章

将 Ruby 哈希转换为 YAML

如何对 YAML 文件进行排序?

将字符串转换为哈希符号的最佳方法

使用点分路径键字符串访问 Ruby 哈希

使用点分路径键字符串访问 Ruby 哈希

js-yaml -> 解析 ruby​​ 类型