2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ojを使う際は mode => compat を指定した方がよい

Last updated at Posted at 2019-04-21

最も早い 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 もある。

以上。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?