0

我正在使用 ruby​​ 1.9.3 并从 API GET 请求接收到以下哈希:

puts api_response

{"id"=>"5172901-01", "firstName"=>"a", "lastName"=>"b", "email"=>"test@test.com", "gender"=>"U", "dateOfBirth"=>"1983-08-05"}
{"id"=>"2072902-01", "firstName"=>"c", "lastName"=>"d", "email"=>"test@test.com", "gender"=>"U", "dateOfBirth"=>"1955-04-01"}
{"id"=>"1072903-01", "firstName"=>"e", "lastName"=>"f", "email"=>"test@test.com", "gender"=>"M", "dateOfBirth"=>"1987-12-31"}
{"id"=>"2072817-04", "firstName"=>"g", "lastName"=>"h", "email"=>"test@test.com", "gender"=>"U", "dateOfBirth"=>"1985-04-07"}

如何将每个 id 放入它自己的数组中?就像是:

api_response[:id].each do |x|
  api_response_array << x
end

哈希不是用逗号分隔的,我认为这是让我失望的原因。

4

2 回答 2

4

尝试这个:

api_response.map { |x| x["id"] }

有关更多文档,请查看Enumerable#map

编辑:

哈希没有用逗号分隔的原因是因为Kernel#puts在数组上的工作方式。自己试试看puts [1,2,3]:每个元素都在自己的行中,没有逗号。

api_response是一个散列数组,所以我上面的答案从数组中取出每个散列,并提取该"id"字段。

于 2013-08-20T18:02:58.757 回答
1
resp_str = <<EOS
{"id"=>"5172901-01", "firstName"=>"a", "lastName"=>"b", "email"=>"test@test.com", "gender"=>"U", "dateOfBirth"=>"1983-08-05"}
{"id"=>"2072902-01", "firstName"=>"c", "lastName"=>"d", "email"=>"test@test.com", "gender"=>"U", "dateOfBirth"=>"1955-04-01"}
{"id"=>"1072903-01", "firstName"=>"e", "lastName"=>"f", "email"=>"test@test.com", "gender"=>"M", "dateOfBirth"=>"1987-12-31"}
{"id"=>"2072817-04", "firstName"=>"g", "lastName"=>"h", "email"=>"test@test.com", "gender"=>"U", "dateOfBirth"=>"1985-04-07"}
EOS


resp_array = resp_str.lines.map {|line| eval(line) }
id_array = resp_array.map {|h| h['id']}

puts id_array.inspect
于 2013-08-20T18:04:57.103 回答