所以我正在尝试重新组织来自 Google Places API 的一些数据,目前它来自他们的 API,如下所示:
{"results"=> [
{"geometry"=>{"location"=>{"lat"=>51.503815, "lng"=>-0.11007}}, "icon"=>"http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png", "id"=>"5f212d158f4181db3ac0619fb3c52f36d4e276c2", "name"=>"Madeira Cafe", "reference"=>"CnRjAAAApaZWmTl5wOMtW49q3D1BLKAJ_M8lmZxaD6_-AU92qWfVZdokfTWOzlp5En_r9hSUHx-EeP71hzH7iDPYAGPtiqEAXvT4WcI3xlc5XUivenbQLw0j5MHW-ErL-Hbk4xB_by0OSsXCz9etNgkjbp0QCRIQ82Dgj-I3DAJqr7I3EwsFEhoUm2RXf2rCFlSuhfKjSsPuWKA2VGA", {"results"=> [{"geometry"=>{"location"=>{"lat"=>51.503815, "lng"=>-0.11007}},
"icon"=>"http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png",
"id"=>"11111111",
"name"=>"Madeira Cafe",
"reference"=>"xxxxx",
"types"=>["restaurant", "food", "establishment"],
"vicinity"=>"London"}]}
结果被放入具有一个键值的哈希中 - “结果”
其余数据嵌套在内部(我认为),“geometry”
是每个记录的第一个。
我想要得到的是一个简洁的哈希值,每个地方都有一个 ID,存储了纬度/经度和名称......这样就可以存储和查询它。
我尝试过这样的事情:
results_hash = {}
result.each do |geometry, location, id|
results_hash[id] = geometry
end
p results_hash
但我无法让它工作......它总是输出 nil 或只是相同的哈希值?
我希望这是有道理的,像往常一样,如果有人只是说“阅读此内容”,它仍然有很大的帮助。
谢谢!
查理
最佳答案
听起来你想要这个:
results_hash = result["results"].inject({}) { |h, res| h[res["id"]] = res["geometry"]; h }
这将为您提供以下哈希(使用 awesome_print
打印):
{
"2d48a3306535b60663645323cdf972c320da8b9d" => {
"location" => {
"lng" => -0.114522,
"lat" => 51.502653
}
},
"5f212d158f4181db3ac0619fb3c52f36d4e276c2" => {
"location" => {
"lng" => -0.11007,
"lat" => 51.503815
}
}
}
您可能希望将其格式设置得更好一些:
results_hash = result["results"].inject({}) do |h, res|
h[res["id"]] = res["geometry"]
h
end
或者如果您使用的是 1.9:
results_hash = result["results"].each_with_object({}) do |res, h|
h[res["id"]] = res["geometry"]
end
关于ruby - 通过迭代嵌套哈希来构建新哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7149808/