【问题标题】:How do you retrieve nested arrays from csv in Ruby?如何在 Ruby 中从 csv 中检索嵌套数组?
【发布时间】:2015-09-29 08:25:21
【问题描述】:

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

示例行:

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

目前我这样做:

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

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

【问题讨论】:

    标签: arrays ruby csv


    【解决方案1】:

    幸运的是,数组是根据 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])
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-07
        • 2018-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多