Ruby on rails 在RubyonRails中提取哈希数据
我在rails应用程序中使用sabre api(测试许可证), 我得到一个JSON响应,当我解析它时,得到这个散列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
{
"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]