-1

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

4

2 回答 2

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"}}
于 2013-09-03T14:16:38.573 回答
0
h = user[0].roles
h.select {|k, v| k == ''}.each { h['default'] = h['']; h.delete('') }
于 2013-09-03T14:22:38.027 回答