2012-02-22 183 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