Ruby on rails Rails遍历深度哈希数组

Ruby on rails Rails遍历深度哈希数组,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 4,我得到了这个非常混乱的哈希数组作为API响应 (完整的回复数量巨大。只发布了部分回复,但涵盖了回复的所有内容) 我怎样才能到达“航空公司” 我试过这个 <% @flight["air_search_result"]["onward_solutions"]["solution"].each do|h| %> <strong><%=h["pricing_summary"]["total_fare"] %></strong> - <%

我得到了这个非常混乱的哈希数组作为API响应

(完整的回复数量巨大。只发布了部分回复,但涵盖了回复的所有内容) 我怎样才能到达“航空公司”

我试过这个

<% @flight["air_search_result"]["onward_solutions"]["solution"].each do|h| %>
  <strong><%=h["pricing_summary"]["total_fare"] %></strong> - 
  <% h["flights"]["flight"]["segments"]["segment"].each do |s| %>
    <%= s['airline'] %>
  <% end %> <br> <hr>
<% end %>

-


我得到了这个错误

无法将字符串转换为整数

我做了一些修改,比如

<%= h["flights"]["flight"]["segments"]["segment"].first["airline"] %>
Error received - can't convert String into Integer

收到错误-无法将字符串转换为整数


收到错误-未定义nil:NilClass的方法“[]”
有没有一个简单的方法,就像我说的,找到一个键“airline”,并为该键返回其值。我偶然发现,虽然我没有得到任何错误,但我也没有得到任何结果

谢谢

更新

是我干的

<% h["flights"]["flight"]["segments"]["segment"].each do |o,p| %>
<% if o=="airline" %> <%= p %> <% end %>
 <% end %> <br> <hr>
<% end %>



在段内没有数组的情况下,我可以获得一些航空公司的值。
例如,我可以知道出发日期和时间是2014-07-07T07:10:00,索引=5


(向下滚动)

这是一个典型的问题:D

将“=>”替换为“:”并渲染

your_json = {.....}
your_json.gsub("=>", ":")
puts your_json

您可以在使用JSON之前验证它

您可以添加一些代码,这些代码将提取
哈希
中与参数相等的所有键:

class Hash
  def deep_find(query, &block)
    flat_map do |key, value|
      if key == query
        yield value if block_given?
        [value]
      elsif value.is_a? Hash
        value.deep_find(query, &block)
      elsif value.is_a? Array
        value.select { |i| i.is_a? Hash }.flat_map { |h| h.deep_find(query, &block) }
      end
    end
  end
end
例如:

hash = {"h" => [{ 'x' => [1, 5] }, { 'x' => 2 }, { 'f' => { 'x' => [3, 4] } }], 'x' => 6 }
hash.deep_find('x') { |x| puts "#{x}" }
# [1, 5]
# 2
# [3, 4]
# 6
# => [[1, 5], 2, [3, 4], 6]

您可以查看您可以使用
链接对散列的键/值对的访问。try
h.try(:[],'flights')。try(:[],'flights')。try(:[],'segments')
等@MrYoshiji我获得了
segment
的数组,但无法进入其中
try(:[],'airline')
添加此项仍然表示
无法将字符串转换为整数
这意味着您正试图以访问哈希(使用字符串/符号)的方式访问数组的值。(尝试在IRB控制台中查看相同的错误消息)JSFIDLE中显示的内容以逗号结尾。这看起来不像是一个完整/有效的散列。更新了一个示例:API的响应是XML。HttpParty将响应转换为此状态。您知道,我现在可以在段内没有数组的情况下获取很少的值。见更新的问题。
hash = {"h" => [{ 'x' => [1, 5] }, { 'x' => 2 }, { 'f' => { 'x' => [3, 4] } }], 'x' => 6 }
hash.deep_find('x') { |x| puts "#{x}" }
# [1, 5]
# 2
# [3, 4]
# 6
# => [[1, 5], 2, [3, 4], 6]