我正在尝试访问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"}
答案 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
对象,可以按名称访问它们。