Rails遍历来自API XML响应的哈希

我有一个使用Httparty从API收到的哈希。 响应是XML,但httparty将其显示为哈希。 但它太深了,获得价值会让人感到困惑。

{“ air_search_result ”=> {“xmlns”=>“ http://www.cleartrip.com/air/ ”,“ onward_solutions ”=> {“ solution ”=> [{“index”=>“1”,“ pricing_summary “=> {”base_fare“=>”3350.0“,”tax“=>”7828.55“,”total_fare“=>”11178.55“},” flights “=> {” flight “=> {” segments “=> {“ segment ”=> [{“index”=>“1”,“departure_airport”=>“BOM”,“arrival_airport”=>“BLR”,“departure_date_time”=>“2014-07-06T09:15:00 “,”arrival_date_time“=>”2014-07-06T10:50:00“,”flight_number“=>”639“,”航空公司“=>”AI“,”operating_airline“=>”AI“,”停止“= >“0”,“equipment”=>“319”,“duration”=>“5700”},{“index”=>“2”,“departure_airport”=>“BLR”,“arrival_airport”=>“DEL “,”arrival_terminal“=>”3“,”departure_date_time“=>”2014-07-06T20:10:00“,”arrival_date_time“=>”2014-07-06T22:40:00“,”flight_number“=> “404”,“airline”=>“AI”,“operating_airline”=>“AI”,“停止”=>“0”,“设备”=>“320”,“持续时间”=>“9000”}] },“ pax_pricing_info_list ”=> {“ pax_pricing_info ”=> {“pax_type”=>“ADT”,“ pricing_info_list ”=> {“ pricing_info ”=> {“index”=>“1”,“fare_basi s_code“=>”SAP30,SAP30“,……..

我需要进入并显示航空公司,departure_airport等。

“航class”=> { “飞行”=> { “段”=> { “段”=>

  -   

当我包含[“航空公司”]时,rails 4很方便地说不能将String转换为Integer 。 但我可以得到[“pricing_summary”] [“total_fare”]
我尝试了很多变种,嵌套循环,但唉,它不起作用。

我也想知道是否有任何gem或方法可以直接给出结果而不是这种深度遍历

编辑

   -   

请参阅“ BroiSatse ”中的评论:“h [”flight“] [”flight“] [”segments“] [”segment“]是一个数组,而不是哈希。”

 <% @flight["air_search_result"]["onward_solutions"]["solution"].each do|h| %> <%=h["pricing_summary"]["total_fare"] %> - <%= h["flights"]["flight"]["segments"]["segment"][0]["airline"] %> <%= end %> 

或者先用

 <% h["flights"]["flight"]["segments"]["segment"].first["airline"] %> 

或显示所有“航空公司”

 h["flights"]["flight"]["segments"]["segment"].map{|s| s["airline"]} # return: ["AI", "AI"] 

或显示加入分隔符

 h["flights"]["flight"]["segments"]["segment"].map{|s| s["airline"]}.join(', ') 

或显示更多数据

 <% @flight["air_search_result"]["onward_solutions"]["solution"].each do|h| %> <%=h["pricing_summary"]["total_fare"] %> - <% h["flights"]["flight"]["segments"]["segment"].each do |s| %> <%= "#{s['airline']} (#{s['flight_number']})" %> <% end %> <%= end %> 

您可以登录rails控制台。 部分来自API响应:

 h= {"flights"=> {"flight"=> {"segments"=> {"segment"=> [{"equipment"=>"319", "stops"=>"0", "duration"=>"5700", "departure_date_time"=>"2014-07-06T09:15:00", "index"=>"1", "airline"=>"AI", "flight_number"=>"639", "arrival_date_time"=>"2014-07-06T10:50:00", "arrival_airport"=>"BLR", "departure_airport"=>"BOM", "operating_airline"=>"AI"}, {"equipment"=>"320", "stops"=>"0", "duration"=>"9000", "departure_date_time"=>"2014-07-06T20:10:00", "arrival_terminal"=>"3", "index"=>"2", "airline"=>"AI", "flight_number"=>"404", "arrival_date_time"=>"2014-07-06T22:40:00", "arrival_airport"=>"DEL", "departure_airport"=>"BLR", "operating_airline"=>"AI"}]}}}, "index"=>"1", "pricing_summary"=> {"taxes"=>"7828.55", "base_fare"=>"3350.0", "total_fare"=>"11178.55"}} h["flights"]["flight"]["segments"]["segment"].first["airline"] # 'AI' h["flights"]["flight"]["segments"]["segment"][0]["airline"] # "AI" h["flights"]["flight"]["segments"]["segment"].map{|s| s["airline"]}.join(', ') # "AI, AI" h["flights"]["flight"]["segments"]["segment"].each { |s| puts "#{s['airline']} (#{s['flight_number']})" } # AI (639) # AI (404)