2012-03-07 58 views

回答

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 
1

如果你經常需要這個功能,你可以擴展Ruby Hash類。

實施將改變從紅寶石版本的升級,但大致是這樣的:

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
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" }