2016-06-29 3 views
0

ネストされたJSONのキーから値を取得しようとしています。Ruby Jsonがキーでネストされた要素にアクセス

JSON構造は以下の通りである:

enter image description here

は私がしようとした場合:

:私はのように携帯電話の値を取得しようとした場合

puts person_id["name"] 

それはしかし、その後、正常に動作しません

person_id.phone[0].["value"] 

動作しません。

phone valueに正しくアクセスするにはどうすればよいですか?特にprimaryフィールドがtrueの場合は?

私はthisを試しましたが、成功はありませんでした。前もって感謝します。物事のルックスから

+1

は、スタックオーバーフローへようこそ。コードへの入力として機能するデータを表すためにイメージを使用しないでください。私たちはそれを再利用することはできず、それを入力しなければなりません。すぐに潜在的な助けが消えます。また、リンクが壊れて壊れてしまい、あなたの質問が意味をなさないままになることがあります。リンクされたページや「[mcve]」を含む「[ask]」をお読みください。 –

+1

@Tin Manは、なぜコードの画像を投稿してはならないのか説明しました。彼のコメントを見たが、彼のアドバイスを無視することを選んだので私はあなたの質問をd​​ownvoted。答えを選択したにもかかわらず彼が示唆するように、あなたの質問を読むことができるように、あなたはすべきです。また、ダッシュを削除し、ハッシュに変数を代入すると(例: 'hash = {...}')、読者はカットアンドペーストして変数を定義することなく参照することができます。私はあなたが編集した私のdownvoteを削除します。 –

答えて

3

あなたの唯一の問題をコードは、ハッシュキーアクセサー["phone"]を使用する必要があるときに、ドットメソッドアクセサ.phoneを使用しようとしたことが原因でした。

これはわかりやすい間違いです。それはJavascriptで動作します。

実際にこの機能を追加することは難しくありません。 RubyにはOpenStructクラスがあり、これはドットメソッドアクセサを自動的に追加するハッシュのようなオブジェクトです。あなたは標準libの一部であるrequire ostructにする必要があります。

あなたは自動的にOpenStructs(source)に、すべてのハッシュを変換するJSON.parseを伝えることができます。

object = JSON.parse(json, object_class: OpenStruct) 

それともrecursive-open-struct宝石を使用することができます。

RecursiveOpenStruct.new(nested_hash) 
3

person_idは、文字列キー"name""email"、および"phone"とハッシュです。キー"phone"の値は配列であり、各要素はキー"label""value"、および"primary"を持つハッシュです。何をしたいような場合には、このです:もちろん

phone_array = person_id["phone"] 
# => [ { "label" => "Work", ... }, ... ] 

first_phone = phone_array[0] 
# => { "label" => "Work", ... } 

first_phone_value = first_phone["value"] 
# => "+0109135008" 

、あなたはこのようになります1行にこれを行う方法を探しています:

person_id["phone"][0]["value"] 
# => "+0109135008" 
+0

ありがとうヨルダン。それは本当に働いた。そして、現在の電話は常に0レベルになるので、アクティブな電話を得るために何か変更を加える必要はありません。 もう一度ありがとうございます。 –

関連する問題