Oj.dumpでシンボルを吐く時は:mode => compatする
Ojを知ったきっかけ
Padrinoでスケルトンを作るとGemfileにojというgemが入っている。
Optimized JSONの略らしい。
標準ライブラリとなったjsonよりも早いらしい。
自分も、開発しているサービスで使われているJSONデータを使ってやってみたら、
確かにOjの方が早かった。
Ojのdump mode
で、改めて触ってたら、デフォルトでOj.dumpでJSONを吐くと、
シンボルはすべて":hoge"のようになることが分かったのでメモ。
もしそれが意図しておらず、JavaScriptでコロンは不要なら、
:mode => :compat
が必要である。
Oj.dump({ :hoge => :fuga }) #=> {":hoge":":fuga"} Oj.dump({ :hoge => :fuga }, :mode => :compat) #=> {"hoge":"fuga"}
他のmodeは
- :strict
- :null
- :strict modeでExceptionが投げられるデータがnullになって、例外が投げられなくなる
- :object
- オブジェクトを渡すと、オブジェクトのインスタンス変数をdumpしてくれる
- これがパフォーマンス的に最高のモードらしい
- :compat
- compatはcompatibilityの略
- 渡されたObjectがto_hashかto_jsonを呼べればそれを使う。なければOjがよしなにしてくれる
また、default_optionsを最初に設定しておくこともできる。
Oj.default_options = {:mode => :compat}