JSON至CSV将数据写入CSV文件

Gurmukh Singh |

我有一个小脚本:

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的操作,但是它不起作用

maicher

您在代码中的第一个错误是您<<调用一次。每个函数<<创建一行,因此您必须调用<<方法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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章