ruby的新手,在嵌套哈希中找到一个值

时间:2016-11-11 00:50:42

标签: ruby

我无法弄清楚如何从这个嵌套哈希中获取@responseType的值。

{
  "mgmtResponse": {
    "@responseType": "operation"}}

2 个答案:

答案 0 :(得分:3)

虽然@tadman严格正确,但使用新的ruby 2.3挖掘功能更安全。最大的区别是,如果密钥不存在,dig将返回nil,而括号表示法将抛出NoMethodError: undefined method `[]' for nil:NilClass。要使用dig,您可以使用hash.dig("mgmtResponse", "@responseType")

你在问题​​中使用的哈希的语法有点奇怪和尴尬,因为看起来键是字符串(因为它们被引号包围)但是因为你使用:表示法ruby转换他们是符号。因此,您的哈希hash.dig(:mgmtResponse, :@responseType)将起作用且hash.dig("mgmtResponse", "@responseType")将为零,因为那些字符串键不存在。如果您使用=>表示法而不是:表示法,则hash.dig("mgmtResponse", "@responseType")将存在且hash.dig(:mgmtResponse, :@responseType)将为nil

所以你要找的是:

hash = {
  "mgmtResponse" => {
    "@responseType" => "operation"
  }
}

hash.dig("mgmtResponse", "@responseType") #=> "operation"

或者如果你想使用你的(令人困惑的)哈希语法:

hash = {
  "mgmtResponse": {
    "@responseType": "operation"
  }
}

hash.dig(:mgmtResponse, :@responseType) #=> "operation"

答案 1 :(得分:1)

直接遍历:

hash['mgmtResponse']['@responseType']

您可以对数组,哈希,甚至字符串使用[]方法:

"test"[2]
# => "s"