2016-08-15 55 views
2

我有一個小的腳本:JSON來CSV寫入數據到csv文件

require "csv" 
require "json" 

puts "JSON file name (include extension) ->" 
jsonfile = gets.chomp 

json = JSON.parse(File.open(jsonfile).read) 
#puts json.first.collect {|k,v| k}.join(',') 
puts json.collect {|node| "#{node.collect{|k,v| v}.join(',')}\n"}.join 

CSV.open("generated.csv", "wb") do |csv| 
    csv << json.collect {|node| "#{node.collect{|k,v| v}.join(',')}\n"}.join 
end 

在終端它表明這樣的:

Missing: [User],{"error"=>[{"Something"=>"", "errno"=>"somthing", "de"=>"smoehting", "pe"=>"error", "errorMessage"=>"Missing "}], "data"=>nil} 
Missing: [User],{"error"=>[{"Something"=>"", "errno"=>"somthing", "de"=>"smoehting", "pe"=>"error", "errorMessage"=>"Missing "}], "data"=>nil} 

我需要輸出每一行到一個單獨的行中的一個csv文件。以上是即時嘗試將其寫入csv,但它不起作用

+1

歡迎來到Stack Overflow。請閱讀「[mcve]」。當詢問代碼時,我們需要用最少的代碼來演示問題,以及最少的輸入數據和預期的輸出。如果沒有這些,我們將不得不編寫代碼來測試代碼,或者根據代碼想要的東西來修補假想的數據,或者生成與您想要的無關的輸出。這些都會導致不準確和不直接回答問題的答案,因此我們需要您儘自己的本分,並幫助我們幫助您和那些將來尋找類似解決方案的人。 –

+0

「不工作」以什麼特定方式?它不寫一個文件嗎?寫錯文件?生成堆棧跟蹤? –

回答

1

您的代碼中的第一個錯誤是,您只撥打<<一次。每個<<創建一行,因此您必須撥打<<方法n次,其中n是多行。

你的第二個錯誤是你連接數組元素並嘗試傳遞一個字符串作爲<<的參數。每個<<的參數都應該是一個數組。

彙總,以創建一個包含兩行的CSV文件:

# my.csv 
1,2,3 
4,5,6 

你應該寫:

CSV.open("my.csv", "wb") do |csv| 
    csv << [1, 2, 3] 
    csv << [4, 5, 6] 
end 

同樣,以達到你想要的效果,嘗試重寫代碼爲:

CSV.open("generated.csv", "wb") do |csv| 
    json.each do |node| 
    csv << node.collect { |k,v| v } 
    end 
end