2012-02-23 8 views
0

をハッシュ私は、JSONデコードから、次のハッシュを持っている:ルビー - 配列の変更値が値

{"person"=>{"user"=>[{"username"=>"foo", "status"=>"Y", "roles"=>["accounting", "sales"]}]}}

私は基本的にvalue.to_sentenceを行うようにカンマ区切り文にあるように役割値を変更したいです。これをどのように達成するのですか?

+0

あなたは明確になりますか?あなたは '' accounting ''、 'sales' ''を' 'accounting、sales" 'にしたがっていますか? – Linuxios

+0

はい、私は何をしようとしています。 – oprogfrogo

答えて

2

これを試してください:

def fix_roles(h) 
    user0 = h['person']['user'][0] 
    user0['roles'] = user0['roles'].join(', ') 
end 

[編集]例えば:maerics例に

h = {"person"=>{"user"=>[{"username"=>"foo", "status"=>"Y", "roles"=>["accounting", "sales"]}]}} 
fix_roles(h) 
h # => {"person"=>{"user"=>[{"username"=>"foo", "status"=>"Y", "roles"=>"accounting, sales"}]}} 
+0

TypeError:整数に文字列を変換できません – oprogfrogo

+0

@oprogfrogo:ハッシュを変数にコピーして "h"を呼び出し、 "fix_roles(h)"を呼び出すと、あなたのハッシュが記述どおりに変更されます。 – maerics

+0

私に戻ってくれてありがとう。これは配列の最初の要素で機能します。複数の要素がある場合、どのように更新することができますか?このように、h = {"person" => {"user" => [{"username" => "foo"、 "status" => "Y"、 "roles" => ["accounting"、 "sales" ]、{"username" => "bar"、 "status" => "Y"、 "roles" => ["customer service"、 "sales"]}}} – oprogfrogo

1

おかげで、私は、各配列要素を反復することによって、解決を達成することができた:

def fix_roles(w) 
    w['person']['user'].each do |arr| 
    arr.each do |k,v| 
     arr['roles'] = v.join(', ') if k == 'roles' 
    end 
    end 
end 
関連する問題