我正在寫一個ruby腳本來接受一個CSV輸入文件。我想製作一個漂亮的JSON文件。我覺得我很親密,但我似乎無法達到那裏。我原來的項目是在JS中,但需求已經改變,使其成爲一個Ruby文件。請幫我用我的Ruby腳本(ruby 2.0.0p481)
我輸入文件看起來像這樣
項目ID,描述,價格,成本,價格類型,quantity_on_hand,size_1_name,size_1_price,size_2_name,size_2_price,size_3_name,size_3_price
有一點要注意的是,一些CSV文件中的值可能會丟失,因爲它不存在。
require 'csv'
require 'json'
def is_int(str)
return !!(str =~ /^[-+]?[1-9]([0-9]*)?$/)
end
lines = CSV.open(ARGV[0],{:col_sep => ","}).readlines
# remove first entry of the lines array
keys = lines.shift
lines.each do |values|
# convert the line into a hash and transform string into int
#hash=Hash[keys.zip(values.map{|val| is_int(val) ? val.to_i : val}) ]
hash = keys.zip(values.map{ val})
# Write a file with the hash results
File.open("#{hash['NAME']}.json", "w") do |f|
f.write JSON.pretty_generate [hash]
end
end
我想獲得的輸出是
[
{
id: 111010,
description: 'Coffee',
price: 1.25,
cost: 0.80,
price_type: 'system',
quantity_on_hand: 100000,
modifiers: [
{
name: 'Small',
price: -0.25
},{
name: 'Medium',
price: 0.00
},{
name: 'Large',
price: 0.30
}
]
的Ruby的版本我使用的是2.0.0p481
Error was
usr/lib/ruby/2.0.0/csv.rb:1254:in `initialize': no implicit conversion of nil into String (TypeError)
from /usr/lib/ruby/2.0.0/csv.rb:1254:in `open'
from /usr/lib/ruby/2.0.0/csv.rb:1254:in `open'
from stockimporter.rb:8:in `<main>'
什麼是你的問題?你有錯誤嗎? – spickermann 2015-02-08 20:42:24
將錯誤添加到問題中。我忘了這麼做。對不起 – 2015-02-08 20:46:42
我沒有時間研究這一點,但我懷疑'ARGV [0]'正在評估爲'nil'。在調用「open」之前添加一個'p ARGV [0]'行來確保。 – 2015-02-08 21:09:26