2012-05-06 51 views
0

我在試着解決我遇到的一個問題,即使用我最新的項目之一。這裏是senario:將哈希寫入CSV文件,然後將值讀回以形成哈希值

我打電話給GoToWebinar API來獲取即將到來的網絡研討會。一切工作正常和網絡研討會在哈希的就是這樣的形式獲取:

[ 
{ 
"webinarKey":5303085652037254656, 
"subject":"Test+Webinar+One", 
"description":"Test+Webinar+One+Description", 
"times":[{"startTime":"2011-04-26T17:00:00Z","endTime":"2011-04-26T18:00:00Z"}] 
}, 
{ 
"webinarKey":9068582024170238208, 
"name":"Test+Webinar+Two", 
"description":"Test Webinar Two Description", 
"times":[{"startTime":"2011-04-26T17:00:00Z","endTime":"2011-04-26T18:00:00Z"}] 
} 
] 

我創建了我們要每天跑一次填充CSV本哈希,然後提交rake任務在控制器操作中讀取CSV文件以填充視圖。

這裏是我的代碼填充CSV文件:

g = GoToWebinar::API.new() 
@all_webinars = g.get_upcoming_webinars 
CSV.open("#{Rails.root.to_s}/public/upcoming_webinars.csv", "wb") do |csv| 
    @all_webinars.each do |webinar| 
    webinar.to_a.each {|elem| csv << elem} 
    end 
end 

我需要想辦法來保存的散列在這樣一個被保存在CSV文件的形式接收信息的某些幫助保存順序的方式,也是一種從CSV文件中讀取信息的方式,它以相同的方式在控制器操作中填充哈希值。

+1

CSV和哈希試圖完成兩件不同的事情,所以它們不會真正地來回翻譯。例如,散列中「times」的值就是它自己和另一個散列的數組;這意味着您要將每個項目放入CSV(一層深度數據結構)至少要深入三層。有沒有理由不能將散列保存爲JSON文件並將其讀回?否則,你需要將散列分開並將值映射到CSV中的特定列,這將非常脆弱。 – farski

+0

首先,你談論的散列是一個JSON字符串,而不是一個Ruby散列。將字符串保存爲JSON文件中的JSON字符串,或者將其轉換爲Ruby哈希和marshal對象,然後將結果字符串存儲到文件中。在閱讀文件時,您需要「解除」導致Ruby哈希的字符串。 [Ruby編組](http://www.ruby-doc.org/core-1.9.3/Marshal.html) – Kashyap

回答

0

從我從所有示例中學到的知識和完成此工作所做的工作我認爲,繞過此類功能的最佳方法是創建一個rake任務並使用該信息填充數據庫並使用這些信息保存以填充視圖。

0

您希望使用散列鍵(因爲它們是常量)作爲CSV文件的標題。然後像你一樣推動每個元素。

g = GoToWebinar::API.new() 
@all_webinars = g.get_upcoming_webinars 
headers= @all_webinars.keys 
CSV.open("#{Rails.root.to_s}/public/upcoming_webinars.csv", "wb", headers: headers) do |csv| 
    @all_webinars.each do |webinar| 
    webinar.to_a.each {|elem| csv << elem} 
    end 
end 

但是,您要確保散列值中的任何數據都是平坦的。需要處理數組內的哈希時間(可能只是刪除時間並在哈希中有startTime和endTime鍵)。

0

這篇關於Ruby序列化和Alan Skorkin反序列化的文章可能會有所幫助。 Link here