我想创建一个仅包含哈希值的YAML文件。但是,我不能迭代它。当我尝试使用:
加载YAML文件时YAML.load_file('yamlFile.yml')
它只返回文件中的第一个哈希值。这是我想要创建的示例文件:
---
:reach_hypo: true
:liquid: true
---
:reach_hypo: true
:liquid: false
---
:reach_hypo: true
:liquid: true
如果我加载上述文件,我会得到:
{reach_hypo: true, liquid: true}
我找到的唯一解决方法是将所有哈希值添加到数组中,然后将其写入YAML文件。是否有更好的方法,例如YAML方法,迭代YAML文件?
答案 0 :(得分:8)
您可以使用YAML::load_stream从单个文件中读取多个文档。例如:
require 'yaml'
array = []
YAML.load_stream(File.read 'test.yml') { |doc| array << doc }
array
#=> [{:reach_hypo=>true, :liquid=>true}, {:reach_hypo=>true, :liquid=>false}, {:reach_hypo=>true, :liquid=>true}]
答案 1 :(得分:0)
我想你知道这一点,只是想要一个不同的解决方案,但是为了记录,我相信你有两个选择。
- a: b c: d - e: f g: h
x: a: b c: d y: e: f g: h
答案 2 :(得分:0)
你可以尝试使用Psych。它自1.9.3以来一直存在,但我直到今天才注意到它。使用libyaml进行解析。 ruby-doc
我尝试了以下代码并按预期工作:
require 'psych'
hash_arr = Psych.load_stream(File.read('yamlFile.yml'))
#=> [{:reach_hypo=>true, :liquid=>true}, {:reach_hypo=>true, :liquid=>false}, {:reach_hypo=>true, :liquid=>true}]