我正在使用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
哈希不是用逗号分隔的,我认为这就是让我失望的原因。
答案 0 :(得分:4)
试试这个:
api_response.map { |x| x["id"] }
有关更多文档,请查看Enumerable#map
编辑:
哈希未用逗号分隔的原因是Kernel#puts
对数组的作用。试试puts [1,2,3]
,亲眼看看:每个元素都有自己的行,没有逗号。
api_response
是一个哈希数组,所以我上面的回答将每个哈希从数组中取出,然后提取"id"
字段。
答案 1 :(得分: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