json4sでCase Classをシリアライズするときのキーをスネークケースにしたかった
「別にそのままキャメルケースのキーのJSON吐き出せばいいじゃん」ってなると思うけど、
既にスネークケースでJSON吐いてるシステムがあって、さらにscalaでもJSONを吐くシステムを作るときに
統一したいよ〜ていうので考えてみた。
なんか面倒そうなのでスネークケースのCase Class作ればいいじゃん。
なわけで、json4sのソース見た結果、例えばjackson使っている場合は
org.json4s.jackson.Serialization.writeメソッドの中身で
JsonMethods.mapper.writeValueAsString(Extraction.decompose(a)(formats))
ってやってて、JsonASTに変換して組み立てるのとmapperで文字列化するのを一気にやってるのね。
で、JsonASTで使えるキャメルケース⇔スネークケースの変換みたいな便利メソッドがあった!
class MonadicJValue(jv: JValue) { ・・・ /** * Underscore all the keys in this [[org.json4s.JsonAST.JValue]] */ def snakizeKeys = rewriteJsonAST(camelize = false) ・・・ }
ってことで、以下の様な感じで書けば出来るんじゃね?
うむ。