ruby-on-rails - 如何从此哈希中访问值?

标签 ruby-on-rails ruby

我试图访问此哈希中的 latlon 值,但是当我调用 @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/

相关文章:

html - Ruby on Rails 链接、导航

ruby-on-rails - Rails Active Admin 多对多关系

ruby-on-rails - 如何在 Rails Webpacker 中添加多个 source_path

sql - 在 Ruby 中使用 SQL 文件

ruby-on-rails - 如何增加 JRuby Trinidad 池的大小?

ruby-on-rails - 在隐藏字段中创建 has_many 关联

ruby-on-rails - Rails 3 中的外键

ruby-on-rails - 在 Rails 上获取状态 : code on ajax response in a . js.erb 文件

ruby-on-rails - Rails - 可以在 javascript 函数中设置 Rails 变量吗?

ruby - JRuby/Windows 和( native )扩展如何区分它们?