JSON 到 CSV 将数据写入 csv 文件

标签 json ruby csv export-to-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 的方法,但它不起作用

最佳答案

您在代码中的第一个错误是您调用了 <<只有一次。每个<<创建一行,所以你必须调用 <<方法 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

关于JSON 到 CSV 将数据写入 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38952754/

相关文章:

mysql - 使用通用 where 过滤器参数从 mysql 数据库表中删除记录的工具

mysql - Rails 事件记录查询获取最常见的对象

ruby-on-rails - Rails enumerables : why would find_all{. ..}.count 返回的值与 count{...} 不同?

json - 区分 XBRL、XML、CSV 和 JSON

java - Jackson 无法识别的字段 "media:recent"

json - 使用 JSON.parse 解析 OpenStruct 或哈希

python - Scrapy 返回的结果比预期多

python - 如何按列检查文件中索引的出现并打印出结果

c++ - 将多维写入 CSV 文件

python - 使用 Python 读取本地 JSON 文件