play.api.libs.json.JsonでオブジェクトをJson化

case class Human(lastName: String, firstName: String, age: Int)

こいつをJsonに変換しようと思います。

結果からいうとこういうソースになります。

case class Human(lastName: String, firstName: String, age: Int) {
  implicit val humanWrites = new Writes[Human] {
    def writes(human: Human) = Json.obj(
      "first" -> human.firstName,
      "last" -> human.lastName,
      "age" -> human.age
    )
  }
  def toJson = Json.stringify(Json.toJson(this))
}

まずはコンバーターを用意する。

implicit val humanWrites = new Writes[Human] {
  def writes(human: Human) = Json.obj(
    "first" -> human.firstName,
    "last" -> human.lastName,
    "age" -> human.age
  )
}

そしたらJson.toJsonでJsValueに変換した後、Json.stringifyで文字列に変換

def toJson = Json.stringify(Json.toJson(this))

Json化したらPOSTするなりなんなりと。

val h = new Human("koya", "fukushi", 20)
val url = "http://hogehoge.com"
WS.url(url).withHeaders("Content-Type" -> "application/json").post(h.toJson)


詳細は
https://www.playframework.com/documentation/ja/2.3.x/ScalaJson