JSON to CSV 将数据写入csv文件
JSON to CSV write data to csv file
我有一个小脚本:
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 的方法,但它不起作用
您的代码中的第一个错误是您只调用了一次 <<
。每个 <<
创建一行,因此您必须调用 <<
方法 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
我有一个小脚本:
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 的方法,但它不起作用
您的代码中的第一个错误是您只调用了一次 <<
。每个 <<
创建一行,因此您必须调用 <<
方法 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