通过FasterCSV将JSON转换为CSV

时间:2012-08-28 02:05:45

标签: ruby json fastercsv

我是Ruby的新手并且有一个问题。我正在尝试创建一个将JSON转换为CSV的.rb文件。

我遇到了一些不同的消息来源让我做出来:

require "rubygems"
require 'fastercsv'
require 'json'

csv_string = FasterCSV.generate({}) do |csv|
   JSON.parse(File.open("small.json").read).each do |hash|
    csv << hash
  end
end

puts csv_string

现在,它确实输出文本,但它们都被压缩在一起,没有空格,逗号等。如何使其更加自定义,清除CSV文件以便我可以导出该文件?

JSON看起来像:

        {
            "results": [
                {
                    "reportingId": "s", 
                    "listingType": "Business", 
                    "hasExposureProducts": false, 
                    "name": "Medeco Medical Centre World Square", 
                    "primaryAddress": {
                        "geoCodeGranularity": "PROPERTY", 
                        "addressLine": "Shop 9.01 World Sq Shopng Cntr 644 George St", 
                        "longitude": "151.206172", 
                        "suburb": "Sydney", 
                        "state": "NSW", 
                        "postcode": "2000", 
                        "latitude": "-33.876416", 
                        "type": "VANITY"
                    }, 

                    "primaryContacts": [
                        {
                            "type": "PHONE", 
                            "value": "(02) 9264 8500"
                        }
                    ]
                },xxx
        }

CSV只有以下内容:

        reportingId, s, listingType, Business, name, Medeco Medical...., addressLine, xxxxx, longitude, xxxx, latitude, xxxx, state, NSW, postcode, 2000, type, phone, value, (02) 92648544             

1 个答案:

答案 0 :(得分:2)

由于您的JSON结构是散列和列表的混合,并且具有不同高度的级别,因此它并不像您显示的代码那么简单。但是(假设您的输入文件看起来总是一样),编写适当的转换器应该不难。在最低级别,您可以通过

将哈希转换为CSV
hash.to_a.flatten

E.g。

input = JSON.parse(File.open("small_file.json").read)
writer = FasterCSV.open("out.csv", "w")
writer << input["results"][0]["primaryAddress"].to_a.flatten

会给你

type,VANITY,latitude,-33.876416,postcode,2000,state,NSW,suburb,Sydney,longitude,151.206172,addressLine,Shop 9.01 World Sq Shopng Cntr 644 George St,geoCodeGranularity,PROPERTY

希望能指导你的方向。

顺便说一下,你的JSON看起来无效。您应该将},xxx行更改为}]