在 Rails 的嵌套哈希中搜索键

Posted

技术标签:

【中文标题】在 Rails 的嵌套哈希中搜索键【英文标题】:search for key in a nested hash in Rails 【发布时间】:2013-02-08 11:56:49 【问题描述】:

我在一个名为 myAuth 的对象中捕获了以下嵌套哈希(来自 Ominauth-Facebook)

<Ominauth::AuthHash credentials 
                     extra=#<Hashie:: Mash 
                     raw_info=#<Hashie::Mash email="myemail@gmail.com">>>

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

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

但是,我想在不知道确切哈希结构的情况下搜索整个哈希并获取键 email 的值。我该怎么办?

谢谢。

【问题讨论】:

Find key/value pairs deep inside a hash containing an arbitrary number of nested hashes and arrays的可能重复 感谢 Deefour。我会投票结束这个。 【参考方案1】:

不知道这是否是最好的解决方案,但我会这样做:

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)

如果键存在或为假,这将返回值。

【讨论】:

以上是关于在 Rails 的嵌套哈希中搜索键的主要内容,如果未能解决你的问题,请参考以下文章

如何从Rails中的哈希列表中删除嵌套键

我的 rails 嵌套模型无法识别 _destroy 属性

postgresql中的Rails json列不接受任何值,并在存储后调用时返回nil

Rails 命名空间与嵌套资源

从哈希/ YAML 中删除所有空元素?

如何在 Rails 测试中测试 params 哈希?