Nwht0xn1

RailsでJSONをencodeするときの挙動を変更するCreated on 2016-05-02 by r7kamura

WikiHubの公開API を開発するにあたって調べたので書き記しておく。

説明

最近のRailsだと、JSONをencodeする際には ActiveSupport.json_encoder で指定されたクラスが利用されるようになっている。デフォルトでは ActiveSupport::JSON::Encoding::JSONGemEncoder が指定されている。これを変更することで、encodeするときの挙動を変更できる。

サンプルコード

例えば、人間に読みやすい出力を目指して JSON.pretty_generate を使うようにしたい場合、以下のようにして実現できる。

ActiveSupport.json_encoder = Class.new(ActiveSupport::JSON::Encoding::JSONGemEncoder) do
  private

  # @note Override
  def stringify(jsonified)
    ::JSON.pretty_generate(jsonified, max_nesting: false, quirks_mode: true)
  end
end