2012-02-23 71 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