LoginSignup
3
3

More than 5 years have passed since last update.

json4sパースベストプラクティス

Last updated at Posted at 2015-01-30

はじめに

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するのもアリだと思う。

3
3
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
3
3