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)

・・・

}

ってことで、以下の様な感じで書けば出来るんじゃね?

うむ。