从ruby中的htttp请求访问csv数据

时间:2016-02-16 09:21:01

标签: ruby api csv

我正在尝试访问csv数据,如果我发出http请求,我会这样做。 我没有将它保存到csv文件中,因此我将其保存到变量中。 让我们说这是我得到的回应,我怎样才能打印食物?

uuid,event_id,category
12,1,food
13,2,cars

这是重要的ruby代码的一部分。 这是我发现的东西,但它最初与文件一起使用,因此它无法正常工作。

csvdata = request(action,parameter)
@data_hash = {}
CSV.foreach(csvdata) do |row|
  uuid, event_id, category = row
  @data_hash[uuid] = event_id
end

我真的需要文件吗?还是有一种简单的方法可以访问这些值?

更新

CSV.parse(csvdata,data = Hash.new) do |row|
  puts data
end

哈希应该是这样的,所以我可以使用列名

{"uuid" => "12,13", "event_id" => "323,3243", "category" => "food,cars"}

2 个答案:

答案 0 :(得分:1)

csv_data = Hash.new{|k, v| k[v] = []}
CSV.parse(csv_string, headers: true) do |row|
  row.each{|k, v| csv_data[k] << v}
end
csv_data = Hash[csv_data.map{|k, v| [k, v.join(",")]}]
  

在规范请求输出后更新。

答案 1 :(得分:0)

试试这个:

csvdata = request(action,parameter)
@data_hash = {}
CSV.parse(csvdata, headers: true) do |row|
  @data_hash[row['uuid']] = row['event_id']
end

@data_hash
# => {"12"=>"1", "13"=>"2"}

解析CSV时,秒参数(代码中的data = Hash.new)实际上是一个选项参数。您可以看到可用的选项here

  

<强>:标头

     

如果设置为:first_row或true,则CSV文件的初始行将被视为一行标题。如果设置为Array,则内容将用作标题。如果设置为String,则String通过调用:: parse_line运行,并使用相同的:col_sep,:row_sep和:quote_char作为此实例来生成标头数组。此设置会导致#shift将行返回为CSV :: Row对象而不是Arrays,而#read则返回CSV :: Table对象而不是数组Array。

传递headers: true时 - 将值解析为Row对象,可以按名称访问它们。