0

我是 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             
4

1 回答 1

3

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

hash.to_a.flatten

例如

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行更改为}].

于 2012-08-31T10:48:18.653 回答