Ruby:如何重命名一个空字符串的哈希键?

时间:2013-09-03 14:14:42

标签: ruby hash

我从我们的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返回(已经明确表示不在桌面上)。

2 个答案:

答案 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('') }