JSON в CSV запись данных в csv-файл [закрыто]
У меня есть небольшой скрипт:
require "csv"
require "json"
puts "JSON file name (include extension) ->"
jsonfile = gets.chomp
json = JSON.parse(File.open(jsonfile).read)
#puts json.first.collect {|k,v| k}.join(',')
puts json.collect {|node| "#{node.collect{|k,v| v}.join(',')}n"}.join
CSV.open("generated.csv", "wb") do |csv|
csv << json.collect {|node| "#{node.collect{|k,v| v}.join(',')}n"}.join
end
В терминале это выглядит так:
Missing: [User],{"error"=>[{"Something"=>"", "errno"=>"somthing", "de"=>"smoehting", "pe"=>"error", "errorMessage"=>"Missing "}], "data"=>nil}
Missing: [User],{"error"=>[{"Something"=>"", "errno"=>"somthing", "de"=>"smoehting", "pe"=>"error", "errorMessage"=>"Missing "}], "data"=>nil}
Мне нужно вывести каждую строку в отдельную строку в файле csv. Выше это то, что я пытаюсь сделать, чтобы записать его в csv, но это не работает
1 ответ:
Ваша первая ошибка в коде заключается в том, что вы вызываете
Ваша вторая ошибка заключается в том, что вы объединяете элементы массива и пытаетесь передать строку в качестве аргумента<<
только один раз. Каждый<<
создает одну строку, поэтому вам нужно вызвать метод<<
n-раз, где n - это число строк.<<
. Каждый аргумент<<
должен быть массивом.Суммируя, создать CSV-файл, содержащий две строки:
# my.csv 1,2,3 4,5,6
Вы должны написать:
CSV.open("my.csv", "wb") do |csv| csv << [1, 2, 3] csv << [4, 5, 6] end
Аналогично, чтобы добейтесь желаемого эффекта, попробуйте переписать код следующим образом:
CSV.open("generated.csv", "wb") do |csv| json.each do |node| csv << node.collect { |k,v| v } end end