2015-07-10 37 views
1

通过Ruby的本地csv库读取一个CSV文件,每一行都以数组形式存储,但其中的值存储为字符串。但是,我的一些值本身就是数组,我想保留这些值。如何从Ruby的csv中检索嵌套数组?

实例行:

0,Yes,Local,-150,"[""Peach"", ""Almond""]",Classic,"[""Red"", ""Blue"", ""Green""]" 

目前我做的:

csv = CSV.read('data.csv', 'r', :headers => true, :converters => :numeric) 

对于我已经使用转换器的数字,但做任何事情同样存在数组?

回答

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]) 
+0

这是聪明的,我喜欢它,它的工作原理。 –

1

您可以使用eval,但只有这样做,如果你知道CSV的来源。如果任何人都可以上传,则需要另寻方法。

eval '"[""Peach"", ""Almond""]"'.gsub('""', '\'').gsub(/^\"|\"$/, '') 

第一位是带引号的数组的字符串。我用双引号替换双引号,并删除尾部/引号。然后它是一个包含适当数组格式的字符串。