在ruby中将.json转换为.csv

Sha*_*h c 17 ruby csv json ruby-on-rails-3

我想使用ruby将.json文件转换为.csv文件.请帮我这样做.

还提出了实现这一目标的任何工具.

Ale*_*tie 30

尝试这样的事情:

require 'csv'
require 'json'

csv_string = CSV.generate do |csv|
  JSON.parse(File.open("foo.json").read).each do |hash|
    csv << hash.values
  end
end

puts csv_string
Run Code Online (Sandbox Code Playgroud)

  • 漂亮又简单。请记住,这没有考虑嵌套,并假定列表中的所有对象都是相同的。 (3认同)

Mar*_*ear 9

要实际写入文件...

require 'csv'
require 'json'

CSV.open("your_csv.csv", "w") do |csv| #open new file for write
  JSON.parse(File.open("your_json.json").read).each do |hash| #open json to parse
    csv << hash.values #write value to file
  end
end
Run Code Online (Sandbox Code Playgroud)


kor*_*Zis 5

我认为在ruby中将JSON转换为CSV的简单方法是使用json2csv ruby​​ gem.

PS:我可能有偏见,因为我是这个的作者.

json2csv github repo

运行命令

json2csv convert data/sample.json
Run Code Online (Sandbox Code Playgroud)

输入文件

在这种特殊情况下,它将转换为以下json:

cat data/sample.json

{
    "12345": {
        "Firstname": "Joe",
        "Lastname": "Doe",
        "Address": {
            "Street": "#2140 Taylor Street, 94133",
            "City": "San Francisco",
            "Details": {
                "note": "Pool available"
            }
        }
    },

    "45678": {
        "Firstname": "Jack",
        "Lastname": "Plumber",
        "Address": {
            "Street": "#111 Sutter St, 94104",
            "City": "San Francisco",
            "Details": {
                "note": "Korean Deli near to main entrance"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

产量

cat data/sample.json.csv

id,Firstname,Lastname,Address.Street,Address.City,Address.Details.note
12345,Joe,Doe,"#2140 Taylor Street, 94133",San Francisco,Pool available
45678,Jack,Plumber,"#111 Sutter St, 94104",San Francisco,Korean Deli near to main entrance
Run Code Online (Sandbox Code Playgroud)

  • 宝石没有测试。@korCZis 在您解决此问题时告诉我。 (2认同)