如何从此Ruby哈希中提取值?

时间:2012-08-03 23:53:51

标签: ruby json api parsing hash

我正在使用Foursquare API,我想从此哈希中提取“id”值

[{"id"=>"4fe89779e4b09fd3748d3c5a", "name"=>"Hitcrowd", "contact"=>{"phone"=>"8662012805", "formattedPhone"=>"(866) 201-2805", "twitter"=>"hitcrowd"}, "location"=>{"address"=>"1275 Glenlivet Drive", "crossStreet"=>"Route 100", "lat"=>40.59089895083072, "lng"=>-75.6291255071468, "postalCode"=>"18106", "city"=>"Allentown", "state"=>"Pa", "country"=>"United States", "cc"=>"US"}, "categories"=>[{"id"=>"4bf58dd8d48988d125941735", "name"=>"Tech Startup", "pluralName"=>"Tech Startups", "shortName"=>"Tech Startup", "icon"=>"https://foursquare.com/img/categories/shops/technology.png", "parents"=>["Professional & Other Places", "Offices"], "primary"=>true}], "verified"=>true, "stats"=>{"checkinsCount"=>86, "usersCount"=>4, "tipCount"=>0}, "url"=>"http://www.hitcrowd.com", "likes"=>{"count"=>0, "groups"=>[]}, "beenHere"=>{"count"=>0}, "storeId"=>""}] 

当我尝试使用['id']提取它时,我收到此错误can't convert Symbol into Integer。如何使用ruby提取值?另外,如何为每次提取“id”值的多个哈希执行此操作?

请原谅我的经验不足。谢谢!

3 个答案:

答案 0 :(得分:3)

它包含在一个数组中,这就是[]在开始和结束时的含义。但它看起来也只是这个数组中的一个对象,这是你真正想要的哈希。

所以假设你想要这个数组中的第一个对象:

mydata[0]['id'] # or mydata.first['id'] as Factor Mystic suggests

但通常当一个API返回一个数组时,有一个原因(它可能会返回许多结果而不只是一个),并且天真地从中取出第一个项目,这不是你想要的。因此,在将其硬编码到应用程序之前,请确保获得您真正期望的数据。

答案 1 :(得分:2)

对于多个哈希,如果你想做某事(运行某种程序),那么

resultsArray.each do |person|
  id = person["id"] #then do something with the id
end

如果您想获取包含ID的数组,那么

resultsArray.map{|person| person["id"]}  
# ["4fe89779e4b09fd3748d3c5a", "5df890079e4b09fd3748d3c5a"]

要从数组中抓取一个项目,请参阅Alex Wayne的回答

答案 2 :(得分:0)

要获取一组ID,请尝试:resultsArray.map { |result| result["id"] }