2016-11-11 11 views
-1

このネストされたハッシュから@responseTypeの値を取得する方法がわかりません。ruby​​の新機能で、ネストされたハッシュの値を見つける

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

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

またはあなたは、あなたの(混乱)ハッシュの構文を使用したい場合= [{:mgmtResponse]#=> {:@responseType => "operation"} 'のようになりますので、g [:@ responseType]#=>" operation " [:@responseType] '。ちなみに、例の各入力に変数を割り当てると便利です(例: 'h = {" mgmtResponse ":{" @responseType ":" operation "}})。そうすることで、読者は答えやコメントを定義することなくそれらの変数を参照することができます。 –

答えて

1

アップストレートトラバーサル:

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

あなたは、アレイへ[]アプローチを使用することができても、文字列、ハッシュ:

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

@tadmanは、厳密に正しいですが、それは使用する方が安全です新しいRuby 2.3 dig関数。大きな違いは、キーが存在しない場合、digはnilを返し、括弧表記はNoMethodError: undefined method `[]' for nil:NilClassを投げるということです。 digを使用するには、hash.dig("mgmtResponse", "@responseType")を使用します。

質問で使用したハッシュの構文は、キーが文字列(引用符で囲まれているため)であるように見えますが、:の表記法ルービーを使用するため、記号。だからあなたのハッシュでhash.dig(:mgmtResponse, :@responseType)が動作し、hash.dig("mgmtResponse", "@responseType")はゼロになります。なぜなら、それらの文字列のキーが存在しないからです。 :表記の代わりに=>表記を使用すると、hash.dig("mgmtResponse", "@responseType")が存在し、hash.dig(:mgmtResponse, :@responseType)nilになります。

だから何あなたが探していることはこれです: 'H'はあなたのハッシュ、 `gである場合

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

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

hash.dig( "mgmtResponse"、 "@responseType")#=> nil'私が試したとき? –

+2

'{" key ":" value} "を使用すると、キーがシンボルに変換されます!だからこそ! – thesecretmaster

+0

大丈夫です。 –

関連する問題