我试图访问此哈希中的 lat
和 lon
值,但是当我调用 @object["lat"]
或 object[:lat]
它返回 nil
。这是哈希:
{"searchresults"=>{"place"=>{"place_id"=>"100066", "osm_type"=>"node", "osm_id"=>"107775", "place_rank"=>"15", "boundingbox"=>"51.3473219,51.6673219,-0.2876474,0.0323526", "lat"=>"51.5073219", "lon"=>"-0.1276474", "display_name"=>"London, Greater London, England, SW1A 2DX, United Kingdom", "class"=>"place", "type"=>"city", "importance"=>"0.9654895765402", "icon"=>"https://locationiq.org/static/images/mapicons/poi_place_city.p.20.png"}, "timestamp"=>"Thu, 25 Apr 19 01:43:32 +0530", "attribution"=>"https://locationiq.com/attribution", "querystring"=>"london", "polygon"=>"false", "exclude_place_ids"=>"100066", "more_url"=>"https://locationiq.org/static/search.php?q=london&exclude_place_ids=100066&format=xml"}}
最佳答案
如果你有:
object = {"searchresults"=>{"place"=>{"place_id"=>"100066", "osm_type"=>"node", "osm_id"=>"107775", "place_rank"=>"15", "boundingbox"=>"51.3473219,51.6673219,-0.2876474,0.0323526", "lat"=>"51.5073219", "lon"=>"-0.1276474", "display_name"=>"London, Greater London, England, SW1A 2DX, United Kingdom", "class"=>"place", "type"=>"city", "importance"=>"0.9654895765402", "icon"=>"https://locationiq.org/static/images/mapicons/poi_place_city.p.20.png"}, "timestamp"=>"Thu, 25 Apr 19 01:43:32 +0530", "attribution"=>"https://locationiq.com/attribution", "querystring"=>"london", "polygon"=>"false", "exclude_place_ids"=>"100066", "more_url"=>"https://locationiq.org/static/search.php?q=london&exclude_place_ids=100066&format=xml"}}
你可能想使用:
object.dig('searchresults','place','lat')
=> "51.5073219"
好处是,如果碰巧您的对象
没有预期的结构,您将收到一个nil
:
object.dig('searchresults','foo_place','lat')
=> nil
而顺序哈希访问器会抛出一个错误:
object['searchresults']['foo_place']['lat']
Traceback (most recent call last):
1: from (irb):60
NoMethodError (undefined method `[]' for nil:NilClass)
处理 nil
可能比处理 NoMethodError
更容易。
如果你更喜欢使用符号作为键(而不是字符串),那么你可以这样做:
object.with_indifferent_access.dig(:searchresults, :place, :lat)
=> "51.5073219"
请注意,如果没有 with_indifferent_access
(或将您的键从字符串转换为符号的其他方法之一):
object[:searchresults][:place][:lat]
Traceback (most recent call last):
1: from (irb):67
NoMethodError (undefined method `[]' for nil:NilClass)
关于ruby-on-rails - 如何从此哈希中访问值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55838041/