2017-05-23 27 views
-5

私は以下の形式のJSON配列を持っていますが、そのキーを使用してオブジェクトの位置(インデックス)を取得する方法はありますか?私は私が(この場合は1)そのIDを与えられていた場合、最初の要素の位置を取得したい場合、私はそれについて移動する方法を例えばJSON配列のオブジェクトのインデックスを取得する方法は?

json = [ 
    { 
     "id"=>1, 
     "user_name"=>"Mean Dean", 
     "user_profile_id"=>"1", 
     "amount"=>4 
    }, 
    { 
     "id"=>2, 
     "user_name"=>"Mad Stan", 
     "user_profile_id"=>"2", 
     "amount"=>7 
    }, 
    { 
     "id"=>3, 
     "user_name"=>"Jack Dean", 
     "user_profile_id"=>"3", 
     "amount"=>8 
    } 
] 

indexメソッドについては読んでいますが、JSON配列に適用する方法はわかりません。

ご協力いただきありがとうございます。

+0

質問のタイトルはあなたが実際に求めているものとは何の関係もありません。 *これまでに試したことを*表示し、エラーの原因を示してください。 –

+0

前の質問から更新していません。愚かな間違いをお詫び申し上げます。 –

+0

[質問の編集](https://stackoverflow.com/posts/44130276/edit)。 –

答えて

1

あなたがEnumerable#detectを使用するかもしれない、あなたはjson変数であなたの配列を持っていると仮定すると:

json.detect { |e| e['id'] == 1 } 
#⇒ { 
#   "amount" => 4, 
#    "id" => 1, 
#  "user_name" => "Mean Dean", 
# "user_profile_id" => "1" 
# } 

この要素のインデックスを取得するには、一つはEnumerable#find_indexを使用します。

json.find_index { |e| e['id'] == 1 } 

このオブジェクトを更新するには、返されたハッシュを更新するだけです。

json.detect { |e| e['id'] == 1 }['amount'] = 500 
#⇒ 500 
json 
#⇒ [ 
# [0] { 
#    "amount" => 500, ⇐ !!!!!!! 
#     "id" => 1, 
#   "user_name" => "Mean Dean", 
# "user_profile_id" => "1" 
# }, 
# [1] { 
#    "amount" => 7, 
#     "id" => 2, 
#   "user_name" => "Mad Stan", 
# "user_profile_id" => "2" 
# }, 
# [2] { 
#    "amount" => 8, 
#     "id" => 3, 
#   "user_name" => "Jack Dean", 
# "user_profile_id" => "3" 
# } 
# ] 
+0

与えられたidを持つオブジェクトが存在する場合、 "amount"を更新できるように位置が必要でした。これはオブジェクトを返します。どのように私はそれを操作するだろうか? –

関連する問題