【问题标题】:Need ideas to change a key's name of JSON Object on RUBY需要想法来更改 RUBY 上 JSON 对象的键名
【发布时间】:2012-03-07 14:22:56
【问题描述】:

我正在寻找一种方法来更改 json 对象的键名,该对象是 ruby​​ 上的哈希,如下所示

来源

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

结果

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

有个好主意吗?

【问题讨论】:

标签: ruby json hash key


【解决方案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】:

    如果你经常需要这个功能,你可以扩展 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
    

    基本上,使用新键和旧值在哈希中创建一个新的键值对。然后删除原来的对。

    注意:从性能角度来看,不建议对大型哈希执行此类操作。

    【讨论】:

      【解决方案3】:

      如果您正在序列化 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-10
        • 1970-01-01
        • 2020-09-19
        • 1970-01-01
        • 2021-11-26
        • 2019-02-09
        相关资源
        最近更新 更多