需要改变RUBY上JSON对象的密钥名称的想法

时间:2012-03-07 14:22:56

标签: ruby json hash key

我找到一种方法来更改json对象的密钥名称,这是在ruby上的哈希,如下所示

来源

{ "a" => "b", "b" => "bb" }

结果

{ "c" => "b", "b" => "bb" }

有个好主意?

3 个答案:

答案 0 :(得分:1)

如果您经常需要此功能,可以扩展Ruby Hash类。

实现因ruby版本而异,但大致类似于:

class Hash
  module ClassMethods
    def self.replace_key(old_key, new_key)
     self[new_key] = self[old_key]
     self.delete(old_key)
    end
  end
end

基本上,使用新密钥和旧值在哈希中创建新的密钥,值对。然后删除原始对。

注意:从性能角度来看,在大型哈希上执行此类操作是不可取的。

答案 1 :(得分:1)

source = { "a" => "b", "b" => "bb", "c" => "lol" }
PATTERN = { "a" => "c", "c" => "e" }
source.inject({}) do |new_hash, (k, v)|
  key = PATTERN[k] || k
  new_hash[key] = v
  new_hash
end
#=> { "c" => "b", "b" => "bb", "e" => "lol" }

答案 2 :(得分:0)

如果要序列化ActiveRecord或ActiveModel对象,则可以覆盖该类的as_json方法。像这样:

class Foo < ActiveRecord::Base
  def as_json(options = { })
     super((options.select {|k,v| k.to_s != "a" }).merge("c" => options["a"]))
  end
end