我是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
答案 0 :(得分:2)
由于您的JSON结构是散列和列表的混合,并且具有不同高度的级别,因此它并不像您显示的代码那么简单。但是(假设您的输入文件看起来总是一样),编写适当的转换器应该不难。在最低级别,您可以通过
将哈希转换为CSVhash.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
行更改为}]
。