Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 通过FasterCSV将JSON转换为CSV_Ruby_Json_Fastercsv - Fatal编程技术网

Ruby 通过FasterCSV将JSON转换为CSV

Ruby 通过FasterCSV将JSON转换为CSV,ruby,json,fastercsv,Ruby,Json,Fastercsv,我刚接触Ruby,有一个问题。我试图创建一个.rb文件,将JSON转换为CSV 我遇到了一些不同的来源,让我做出: 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

我刚接触Ruby,有一个问题。我试图创建一个.rb文件,将JSON转换为CSV

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

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仅包含以下内容:

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

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

hash.to_a.flatten
例如

希望能指引你前进的方向


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

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

hash.to_a.flatten
例如

希望能指引你前进的方向


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

JSON看起来像什么?您希望CSV看起来像什么?刚刚更新了问题伙伴。这是一种奇怪的CSV格式——通常CSV在第一行中有键列,在后面的行中有值列(因此映射嵌套的JSON结构会很混乱),这很好。我对CSV格式并不挑剔,只是一些可以导出到excel的东西。是的,JSon是嵌套的,有点复杂,所以无论是更容易接受所有内容还是有选择地接受,我都可以接受。JSon看起来像什么?您希望CSV看起来像什么?刚刚更新了问题伙伴。这是一种奇怪的CSV格式——通常CSV在第一行中有键列,在后面的行中有值列(因此映射嵌套的JSON结构会很混乱),这很好。我对CSV格式并不挑剔,只是一些可以导出到excel的东西。是的,JSon是嵌套的,有点复杂,所以不管它是更容易接受一切还是有选择地接受我都可以。谢谢,是的,我知道它是无效的,但它来自我无法控制的服务器,但我应该考虑这样做我自己的一个。谢谢,我唯一的问题是,值和下一个键之间没有空格。。。基于我所拥有的,你如何添加额外的空间?谢谢,是的,我知道它是无效的,但它来自我无法控制的服务器,但我应该考虑这样做我自己的一个。谢谢,我唯一的问题是,值和下一个键之间没有空格。。。根据我所拥有的,你如何添加额外的空间?
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