CSV в JSON Ruby Script? - PullRequest
       4

CSV в JSON Ruby Script?

13 голосов
/ 18 марта 2011

Кто-нибудь знает, как написать скрипт на Ruby, который конвертирует CSV-файл в JSON-файл?

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"]
]} 

Ответы [ 4 ]

45 голосов
/ 19 марта 2011

Это просто в ruby ​​1.9, где data - это ваша строка данных csv

 require 'csv'
 require 'json'

 CSV.parse(data).to_json
21 голосов
/ 26 июля 2014

Для перехода от:

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

10 голосов
/ 05 июня 2015

Опираясь на пример Джоша, теперь вы можете сделать еще один шаг, используя 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
4 голосов
/ 01 февраля 2017

Если вы в проекте Rails

CSV.parse(csv_string, {headers: true})
csv.map(&:to_h).to_json
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...