Нужны идеи, чтобы изменить имя ключа JSON Object на RUBY - PullRequest
0 голосов
/ 07 марта 2012

Я нахожу метод для изменения имени ключа объекта json, который является хэшем на ruby, как показано ниже

source

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

result

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

есть хорошая идея?

Ответы [ 3 ]

1 голос
/ 07 марта 2012

Если вам часто нужна эта функциональность, вы можете расширить класс 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 голос
/ 07 марта 2012
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" }
0 голосов
/ 07 марта 2012

Если вы сериализуете объект 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
...