Ruby on rails 在RubyonRails中提取哈希数据

Ruby on rails 在RubyonRails中提取哈希数据,ruby-on-rails,Ruby On Rails,我在rails应用程序中使用sabre api(测试许可证), 我得到一个JSON响应,当我解析它时,得到这个散列 { "OriginLocation"=>"DEN", "Destinations"=>[ { "Rank"=>1, "Destination"=>{ "DestinationLocation"=>"LAX", "AirportName"=>"Los Angeles International

我在rails应用程序中使用sabre api(测试许可证), 我得到一个JSON响应,当我解析它时,得到这个散列

{
    "OriginLocation"=>"DEN",
    "Destinations"=>[
    {
    "Rank"=>1,
    "Destination"=>{
    "DestinationLocation"=>"LAX",
    "AirportName"=>"Los Angeles International Airport",
    "CityName"=>"Los Angeles",
    "CountryCode"=>"US",
    "CountryName"=>"United States",
    "RegionName"=>"North America",
    "Type"=>"Airport"
    }
    },
    {
    "Rank"=>2,
    "Destination"=>{
    "DestinationLocation"=>"LAS",
    "AirportName"=>"McCarran International Airport",
    "CityName"=>"Las Vegas",
    "CountryCode"=>"US",
    "CountryName"=>"United States",
    "RegionName"=>"North America",
    "Type"=>"Airport"
    }
    },
    {
    "Rank"=>3,
    "Destination"=>{
    "DestinationLocation"=>"CHI",
    "CountryCode"=>"US",
    "CountryName"=>"United States",
    "RegionName"=>"North America",
    "MetropolitanAreaName"=>"Chicago",
    "Links"=>[
    {
    "rel"=>"airportsInCity",
    "href"=>"https://api.test.sabre.com/v1/lists/supported/cities/CHI/airports"
    }
    ],
    "Type"=>"City"
    }
    } 
    ...
    }
如何从中提取数据(例如:目的地)信息? 我尝试了这段代码,但得到了一个错误
“nil:NilClass的未定义方法`each'”


即使指定了
,也只填充
(使用整个哈希数据),而
。这就是为什么你会出错

假设您使用的是Ruby 2.3或更高版本,我建议您改为使用以下内容:

@hash['Destinations'].map { |d| d.dig('Destination', 'CityName') }
#=> ["Los Angeles", "Las Vegas", nil]

你可以在这里读更多。它对于这种深度嵌套的数据非常有用,可以保护您免受不存在的密钥的攻击(并返回
nil
);只要你不把它的用法混用在数组和散列上。

第一个是错误还是第二个?第二个是错误
@hash['Destinations'].map { |d| d.dig('Destination', 'CityName') }
#=> ["Los Angeles", "Las Vegas", nil]