2013-02-22 153 views
1

我有以下的对象捕获嵌套的哈希值(从Ominauth-Facebook)的所谓myAuth搜索键在Rails中嵌套散列

<Ominauth::AuthHash credentials 
        extra=#<Hashie:: Mash 
        raw_info=#<Hashie::Mash email="[email protected]">>> 

我想提取电子邮件,所以我用:

myAuth['extra']['raw_info']['email'] 

但是,我想搜索整个散列并获得键email的值而不知道确切的散列结构。我应该怎么做呢?

谢谢。

+1

[在包含任意数量的嵌套散列和数组的散列内深入查找键/值对]的可能重复(http://stackoverflow.com/questions/8301566/find-key-value-pairs-deep-inside -a-hash-containing-an-any-number-of-nested) – deefour 2013-02-22 19:27:55

+0

谢谢Deefour。我会投票结束这个。 – AdamNYC 2013-02-22 20:03:40

回答

4

不知道这是否是最好的解决办法,但我会做到:如果该键存在或假

h = {seal: 5, test: 3, answer: { nested: "damn", something: { email: "yay!" } } } 

def search_hash(h, search) 
    return h[search] if h.fetch(search, false) 

    h.keys.each do |k| 
    answer = search_hash(h[k], search) if h[k].is_a? Hash 
    return answer if answer 
    end 

    false 
end 

puts search_hash(h, :email) 

这将返回值。