UFO ET IT

CSV에서 JSON 루비 스크립트로?

ufoet 2023. 6. 22. 23:12
반응형

CSV에서 JSON 루비 스크립트로?

csv 파일을 json 파일로 변환하는 Ruby 스크립트를 작성하는 방법을 아는 사람이 있습니까?

CSV 형식은 다음과 같습니다.

Canon,Digital IXUS 70,"Epic, Epic 100",3x,Yes (lockable),Yes (lockable),Yes
Canon, Digital IXUS 75,"Epic, Epic 100",3x,Yes (lockable),Yes (lockable),Yes
Canon,Digital IXUS 80,"Epic, Epic 100",3x,Yes (lockable),Yes (lockable),Yes

그리고 JSON은 다음과 같은 결과를 초래해야 합니다.

{ "aaData": [
[ "Canon" , "Digital IXUS 70" , "3x" , "Yes (lockable)" , "Yes (lockable)" , "Yes"],
[ "Canon" , "Digital IXUS 75" , "3x" , "Yes (lockable)" , "Yes (lockable)" , "Yes"],
[ "Canon" , "Digital IXUS 80" , "3x" , "Yes (lockable)" , "Yes (lockable)" , "Yes"]
]} 

이것은 데이터가 CSV 데이터 문자열인 Ruby 1.9에서 쉽습니다.

 require 'csv'
 require 'json'

 CSV.parse(data).to_json

시작하기:

Year,Make,Model,Description,Price
1997,Ford,E350,"ac, abs, moon",3000.00
1999,Chevy,"Venture ""Extended Edition""","",4900.00
1999,Chevy,"Venture ""Extended Edition, Very Large""",,5000.00
1996,Jeep,Grand Cherokee,"MUST SELL!
air, moon roof, loaded",4799.00

로.

[
  {:year => 1997, :make => 'Ford', :model => 'E350', :description => 'ac, abs, moon', :price => 3000.00},
  {:year => 1999, :make => 'Chevy', :model => 'Venture "Extended Edition"', :description => nil, :price => 4900.00},
  {:year => 1999, :make => 'Chevy', :model => 'Venture "Extended Edition, Very Large"', :description => nil, :price => 5000.00},
  {:year => 1996, :make => 'Jeep', :model => 'Grand Cherokee', :description => "MUST SELL!\nair, moon roof, loaded", :price => 4799.00}
]

수행할 작업:

csv = CSV.new(body, :headers => true, :header_converters => :symbol, :converters => :all)
csv.to_a.map {|row| row.to_hash }
#=> [{:year=>1997, :make=>"Ford", :model=>"E350", :description=>"ac, abs, moon", :price=>3000.0}, {:year=>1999, :make=>"Chevy", :model=>"Venture \"Extended Edition\"", :description=>"", :price=>4900.0}, {:year=>1999, :make=>"Chevy", :model=>"Venture \"Extended Edition, Very Large\"", :description=>nil, :price=>5000.0}, {:year=>1996, :make=>"Jeep", :model=>"Grand Cherokee", :description=>"MUST SELL!\nair, moon roof, loaded", :price=>4799.0}]

신용: https://technicalpickles.com/posts/parsing-csv-with-ruby

Josh의 예를 바탕으로 CSV::table을 사용하여 한 단계 더 나아갈 수 있습니다.

extracted_data   = CSV.table('your/file.csv')
transformed_data = extracted_data.map { |row| row.to_hash }

이제 전화할 수 있습니다.to_json바로 사용하거나 적절한 형식의 파일에 기록할 수 있습니다.

File.open('your/file.json', 'w') do |file|
  file.puts JSON.pretty_generate(transformed_data)
end

레일즈 프로젝트에 있는 경우

CSV.parse(csv_string, {headers: true})
csv.map(&:to_h).to_json

제 해결책은 마리우의 해결책과 상당히 유사한 방식으로 끝났습니다.

require 'csv'
require 'json'

csv_table = CSV.parse(File.read('data.csv'), headers: true)
json_string = csv_table.map(&:to_h).to_json

File.open('data.json','w') do |f|
  f.puts(json_string)
end

언급URL : https://stackoverflow.com/questions/5357711/csv-to-json-ruby-script

반응형