这是使用Httparty从XML响应中作为parsed_response接收的散列数组。Rails根据深度散列值中的键值显示值
困难和混乱的内部遍历并获得价值。
"flights"=>{
"flight"=>{
"segments"=>{
"segment"=>[ (this has square brackets)
{
"index"=>"3",
"departure_airport"=>"DEL",
"arrival_airport"=>"CCU",
"departure_date_time"=>"2014-07-07T13:20:00",
"arrival_date_time"=>"2014-07-07T15:35:00",
"flight_number"=>"20",
"airline"=>"AI",
"operating_airline"=>"AI",
"stops"=>"0",
"equipment"=>"320",
"duration"=>"8100"
},
{
"index"=>"4",
"departure_airport"=>"CCU",
"arrival_airport"=>"BLR",
"departure_date_time"=>"2014-07-07T18:10:00",
"arrival_date_time"=>"2014-07-07T20:40:00",
"flight_number"=>"771",
"airline"=>"AI",
"operating_airline"=>"AI",
"stops"=>"0",
"equipment"=>"319",
"duration"=>"9000"
}
]
}
}
},
要显示上述哈希值我做
<% h["flights"]["flight"]["segments"]["segment"].each do |o,p| %>
<% if o.class == Hash %>
<strong><%= o['airline'] %></strong>
<%= o['arrival_airport'] %> - <%= o['arrival_date_time'] %><br>
<% else %>
<%= o %>
<% end %>
<% end %>
(注意:简单地把o['airline']
循环后会给can't convert String into Integer
)
else语句是解析低于答复的类型。
"flights"=>{
"flight"=>{
"segments"=>{
"segment"=>{ (no square brackets)
"index"=>"3",
"departure_airport"=>"DEL",
"arrival_airport"=>"CCU",
"departure_date_time"=>"2014-07-07T13:20:00",
"arrival_date_time"=>"2014-07-07T15:35:00",
"flight_number"=>"20",
"airline"=>"AI",
"operating_airline"=>"AI",
"stops"=>"0",
"equipment"=>"320",
"duration"=>"8100"
}
}
}
},
因此,有<%= 0%>否则statment后,会给
["index", "7"] ["departure_airport", "DEL"] ["arrival_airport", "BLR"] ["departure_date_time", "2014-07-10T07:10:00"] ["arrival_date_time", "2014-07-10T09:50:00"] ["flight_number", "807"] ["airline", "9W"] ["operating_airline", "9W"] ["stops", "0"] ["equipment", "738"] ["duration", "9600"]
但有<% elsif o=="departure_airport" %> <%= p %> <% end %>
就地else语句,会给与键关联的值。
要使用该键获取单个值,这很好。但把上述格式中的所有关键字都拿到自己的价值观上真的很麻烦。
应该有一个更好的方法来解析它,但只是无法弄清楚我将如何推导出一个用例,其中['segment']会根据它是否是哈希或恰好给出结果来适当地给出结果关键。
谢谢。
可能重复的[导轨遍历散列的深阵列(http://stackoverflow.com/questions/24579053/rails-traverse -deep-of-hashes) – dax
某些重复的,相同的海报.. –
@dax不,它不是一个可能的副本。这个问题是我问的。我只是无法穿过内部。这个问题是我不得不提出一些尴尬陈述的更新。喜欢改进它。 – arjun