2012-02-22 115 views
3

阅读哈希值的阵列我有两个爸爸走进我的YAML文件,但只有一个家庭出来。 Sam发生了什么事?我如何得到两个?红宝石:从YAML

## dads.rb 
require 'yaml' 
require 'pp' 

dad=[] 

dad[0] = {:name => "Joe", :kids => ["Mary", "John"]} 
dad[1] = {:name => "Sam", :kids => ["Sam Jr", "Samantha", "Samizdat"]} 

open('dads.yml' , 'w') do |f| 
    dad.each do |d| 
     f.write YAML::dump(d) 
    end 
end 

family = [] 
open('dads.yml') do |f| 
    family << YAML::load(f.read) 
end 

pp fams 
+0

不要忘了[接受一个答案(HTTP:// meta.stackexchange.com/a/5235/176476):) – 2012-02-28 02:53:07

回答

7

您转储多个YAML文档,但只能读回一个。相反,你可以转储和读取整个数组:

require 'yaml' 

dads = [] 
dads << {:name => "Joe", :kids => ["Mary", "John"]} 
dads << {:name => "Sam", :kids => ["Sam Jr", "Samantha", "Samizdat"]} 

open('dads.yml', 'w') { |f| YAML::dump(dads, f) } 

family = YAML::load(File.read('dads.yml')) 

p family 
2

你的代码目前创建YAML输出中独立的“文档”。默认情况下,YAML::load只会在第一个文档中读取。尼克拉斯·答案肯定是你应该去的方式,但如果你绝对必须处理多个文档,您可以使用load_documents方法:

family = YAML.load_documents(File.read("dads.yml")) 
# => [{:name=>"Joe", :kids=>["Mary", "John"]}, {:name=>"Sam", :kids=>["Sam Jr", "Samantha", "Samizdat"]}] 
+0

好知道:)我只是试图让'each_document'工作,但似乎并没有提供新YAML实施。该文档不是我见过的最好的。 – 2012-02-22 01:44:20

+0

即使在旧发动机(SYCK),'each_document'已被废弃,只是叫'反正load_documents'。 Psych只处理'load_documents'。 – 2012-02-22 01:46:43

+0

啊。我看到我正在创建多个文档。每个操作员都没有帮助。现在完成了。谢谢。 – dcvii 2012-02-22 21:38:57