我从我们的API团队获得一个哈希返回,其中包含一个项目的空键。响应如下:
user = [
{
'name' : 'John Doe',
'roles' : {
'' : 'admin',
'team2' : 'user'
}
]
我想将roles['']
键重命名为roles['default']
,但我找不到办法。如果我尝试这样的事情:
user.roles.each {|r| r['default'] = r.delete('')}
返回Can't convert String into Integer
是否还有另一种方法可以实现这一点,而不是重写API返回(已经明确表示不在桌面上)。
答案 0 :(得分:1)
您无需在角色上调用each
。这将枚举所有键/值对。如果您只对一对感兴趣。这应该这样做:
user.roles['default'] = user.roles.delete('')
user = {
'name' => 'John Doe',
'roles' => {
'' => 'admin',
'team2' => 'user'
}
}
user['roles']['default'] = user['roles'].delete('')
user # => {"name"=>"John Doe", "roles"=>{"team2"=>"user", "default"=>"admin"}}
答案 1 :(得分:0)
h = user[0].roles
h.select {|k, v| k == ''}.each { h['default'] = h['']; h.delete('') }