如何从Ruby中的csv中检索嵌套数组?

时间:2015-07-10 14:25:15

标签: arrays ruby csv

通过Ruby的本机csv库读取CSV,每行都存储为一个数组,但其中的值存储为字符串。但是,我的一些值本身就是数组,我想保留它们。

示例行:

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

目前我这样做:

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

对于数字我已经使用了转换器,但是对于数组是否存在类似的东西?

2 个答案:

答案 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(/^\"|\"$/, '')

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