最も早い JSON エンコーダーの1つに Oj gem がある。ほとんどのケースでは Oj を使うだけで JSON のエンコード/デコードのパフォーマンスが劇的に改善する。
ただし、1つ注意点があり、Oj を使う際はこのオプションを必ず指定した方がよい。
mode => compat
もし上記のオプションを指定していないと、下記のように :
で始まる文字列が意図せずシンボルになってしまう。
pry(main)> Oj.load('{"a": ":b"}')['a'].class
=> Symbol
もちろんこの挙動は Oj のドキュメントに書いてありバグではないのだが、おそらく Oj を利用する人の大半はこの挙動を望んでいないはず。
このオプションはエンコード/デコードの両方で指定することができる。
Oj.load('{"a": ":b"}', mode: :compat)['a'].class
=> String
pry(main)> Oj.dump({a: :b}, mode: :compat)
=> "{\"a\":\"b\"}"
上記のオプションの挙動さえ忘れなければ、Oj は素晴らしい役目を果たしてくれる。パフォーマンス比較結果は下記の記事の通り。
Oj のパフォーマンス比較では Rails(ActiveSupport) の JSON モジュールが遅すぎると言われることが多いが、それは機能の豊富さとのトレードオフであり、単純な早い遅いの議論は不毛。そのあたりについて詳しい記事は下記の通り。
JSONを高速化する別のアプローチとして fast_jsonapi gem もある。
以上。