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 2

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