使用指定的方法与Oj.dump而不是as_json或to_json?

时间:2016-04-20 18:59:53

标签: ruby-on-rails ruby

有没有办法在使用Oj.dump时指定用于序列化的方法,而不是将其默认为to_json或as_json?

2 个答案:

答案 0 :(得分:1)

Oj没有设置默认方法进行调用的选项,但它会自行序列化调用该方法的结果。

Oj.dump(data.special_as_json)

这也是一个presenter对象的好地方,它实现了你想要的方法to_json

class Glove
  private attr_reader :obj

  def initialize(obj)
    @obj = obj
  end

  def as_json(opts = {})
    {
      # ...
    }
  end
end

Oj.dump(Glove.new(data))

由于您似乎试图避免键入Oj.dump之外的任何内容,因此您可以编写一个包含Oj的包装器来完成工作。

module Ok
  def self.dump(obj)
    Oj.dump(obj.special_as_json)
  end
end

Ok.dump(data)

当然,monkeypatching Oj始终是一个选择,但不是一个好选择。

答案 1 :(得分:1)

尝试

Oj.generate({a: 'test'})
my_hash = {a: 'test'}
Oj.dump(my_hash, mode: :compat)