我正在使用
在Rails的应用程序中收集来自Web服务的响应response = #api.sql_data
这会导致response
等于以下内容。
response
#=> { "success"=>true, "totalcount"=>10, "rows"=>[
# { "ID"=>"0001", "CODE"=>"0000001", "CODE_1"=>"Alpha",
# "NAME"=>"Alpha", "Balance"=>"0" },
# { "ID"=>"0002", "CODE"=>"0000002", "CODE_1"=>"Beta",
# "NAME"=>"Beta", "Balance"=>"0" },
# { "ID"=>"0003", "CODE"=>"0000003", "CODE_1"=>"Charlie",
# "NAME"=>"Charlie", "Balance"=>"0"},
# ...
# ]
# }
我创建了以下方法:
def format_response(response)
response['rows'].map do |row|
{ id: row[0],
code: row[1],
code1: row[2],
balance: row[4] }
end.uniq { |x| x[:code1] }
end
当我为response
的上述值执行此方法时,我获得以下内容。
format_response(response)
#=> [{:id=>nil, :code=>nil, :code1=>nil, :balance=>nil}]
这是不正确的。我希望这个表达式返回以下内容。
{"ID"=>"0001", "CODE"=>"0000001", "CODE_1"=>"Alpha", "NAME"=>"Alpha", "Balance"=>"0"}
我的错误是什么?
答案 0 :(得分:3)
每一行都是一个哈希,因此您需要按名称而不是索引访问其元素(就像使用数组一样)。以下应该有效:
def format_response(response)
formatted_response = response['rows'].map do |row|
{ id: row['ID'],
code: row['CODE'],
code1: row['CODE_1'],
balance: row['balance'] }
end
formatted_response.uniq { |x| x[:code1] }
end
答案 1 :(得分:3)
response['rows']
包含一系列哈希值。 ruby中的哈希值不是关联数组,因此您无法通过hash[0]
获取第一个键。
def format_response(response)
response['rows'].map do |row|
{
id: row["ID"],
code: row["CODE"],
code_1: row["CODE_1"],
balance: row["BALANCE"]
}
end.uniq { |x| x[:code1] }
end