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)