通过Ruby的本机csv库读取CSV,每行都存储为一个数组,但其中的值存储为字符串。但是,我的一些值本身就是数组,我想保留它们。
示例行:
0,Yes,Local,-150,"[""Peach"", ""Almond""]",Classic,"[""Red"", ""Blue"", ""Green""]"
目前我这样做:
csv = CSV.read('data.csv', 'r', :headers => true, :converters => :numeric)
对于数字我已经使用了转换器,但是对于数组是否存在类似的东西?
答案 0 :(得分:3)
幸运的是,数组是根据JSON规则格式化的。尝试:
require 'csv'
require 'json'
CSV::Converters[:json] = lambda{|s|
begin
JSON.parse(s)
rescue JSON::ParserError
s
end
}
csv = CSV.read('data.csv', 'r', :headers => false, :converters => [:numeric, :json])
答案 1 :(得分:1)
您可以使用eval,但只有在知道csv的来源时才能这样做。如果任何人都可以上传,您需要找到另一种方式。
eval '"[""Peach"", ""Almond""]"'.gsub('""', '\'').gsub(/^\"|\"$/, '')
第一位是带引号的数组的字符串。我用单引号替换双引号,并删除尾随/引导引号。然后它是一个包含正确数组格式的字符串。