2011-03-18 9 views
11

क्या कोई जानता है कि रूबी स्क्रिप्ट कैसे लिखनी है जो एक सीएसवी फ़ाइल को जेएसएस फ़ाइल में परिवर्तित करेगा?सीएसवी जेएसओएन रूबी स्क्रिप्ट के लिए?

सीएसवी इस प्रारूप में होगा:

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

उत्तर

40

यह गहरे लाल रंग का 1.9 जहां डाटा अपने csv डेटा स्ट्रिंग

है में आसान है
require 'csv' 
require 'json' 

CSV.parse(data).to_json 
+0

धन्यवाद काम नहीं करता है 1.8 के लिए और मैं अपग्रेड नहीं कर सकता- 1.87 के लिए सही वाक्यविन्यास क्या है? – webbydevy

+0

मणि 'fastcsv' इंस्टॉल करें और सीएसवी को FasterCSV –

+0

'' 'data = File.open ('/ path/to/file.csv') में बदलें। डेटा – benjineer

16

जाने के लिए से:

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

क्रेडिट: http://technicalpickles.com/posts/parsing-csv-with-ruby/

7

जोश उदाहरण पर बिल्डिंग, अब आप इसे ले जा सकते हैं एक कदम आगे 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 
+0

' '' निकाले गए_डेटा = CSV.table ('your/file.csv', header_converters: nil) '' 'यदि आप हेडर्स को मूल तारों के रूप में रखना चाहते हैं, बजाय प्रतीकों को कम करने और परिवर्तित करने के बजाय – benjineer

2

आप एक रेल परियोजना में हैं, तो

CSV.parse(csv_string, {headers: true}) 
csv.map(&:to_h).to_json 
संबंधित मुद्दे