2012-02-23 78 views
0

我有一个JSON解码以下散列:红宝石 - 一个数组的改变散列值值

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

我基本上要改变角色值是在像做value.to_sentence一个逗号分隔的句子。我如何实现这一目标?

+0

你能澄清吗?你想把'[“会计”,“销售”]变成''会计,销售''吗? – Linuxios 2012-02-23 03:05:24

+0

是的,我正在努力。 – oprogfrogo 2012-02-23 03:42:27

回答

2

尝试这种情况:

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

[编辑]例如:

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 2012-02-23 03:43:02

+0

@oprogfrogo:如果你将你的散列复制到一个变量中,说“'h”,并调用“'fix_roles(h)'”,那么你的散列将按照你的描述进行修改。 – maerics 2012-02-23 03:46:09

+0

谢谢你回到我身边。这适用于数组中的第一个元素。如何在有多个元素时更新它。像这样:h = {“person”=> {“user”=> [{“username”=>“foo”,“status”=>“Y”,“roles”=> [“accounting”,“sales” ]},{“username”=>“bar”,“status”=>“Y”,“roles”=> [“customer service”,“sales”]}]}} – oprogfrogo 2012-02-23 18:53:12

1

由于maerics例如,我能够通过每个数组元素迭代,以实现所述溶液:

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