我无法弄清楚如何从这个嵌套哈希中获取@responseType的值。
{
"mgmtResponse": {
"@responseType": "operation"}}
答案 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"