はじめに
json4sには結構色々JSONをパースする方法があり、どれ使ったら良いか分からなくなるので、自分なりのベストプラクティス書いてみた。突っ込み歓迎デス。
Sample
以下では、最終的に
case class Hoge(x: Int, y: Int, z: Boolean)
みたいな出力したいが、実際のjsonが
{"api_x": 1, "y": "2", "z": 1}
みたいなクソ実装になっているものを想定する。
Best Practice
import org.json4s._
case class Hoge(x: Int, y: Int, z: Boolean)
object Hoge {
implicit val format = DefaultFormats
private case class RawHoge(api_x: Int, y: String, z: Int) {
def build: Hoge = Hoge(api_x, y.toInt, z != 0)
}
def fromJson(obj: JValue): Option[Hoge] =
obj.extractOpt[RawHoge].map(_.build)
}
まとめ
class生成をケチるな。
蛇足
変数名だけ変えたい場合は、extractOptする前にtransformFieldするのもアリだと思う。