spray-jsonを使ってエンコード・デコードする方法。
build.sbt
libraryDependencies ++= Seq(
"io.spray" %% "spray-json" % "1.2.6"
)
// ドメインオブジェクト
case class Name(firstName: String, lastName: String)
case class User(id: String, name: Name)
// JSONのマッピングを定義する
import spray.json._
object MyJsonProtocol extends DefaultJsonProtocol {
implicit val NameFormat = jsonFormat2(Name)
implicit val UserFormat = jsonFormat2(User)
}
def jsonに変換する() = {
import MyJsonProtocol._
val user = User("alice", Name("Alice", "Brown"))
val actualJson = user.toJson.compactPrint
val expectedJson = """{"id":"alice","name":{"firstName":"Alice","lastName":"Brown"}}"""
assert(actualJson == expectedJson)
}
def jsonから変換する() = {
import MyJsonProtocol._
val jsonData = """{"id":"alice","name":{"firstName":"Alice","lastName":"Brown"}}"""
val actualUser = jsonData.parseJson.convertTo[User]
val expectedUser = User("alice", Name("Alice", "Brown"))
assert(actualUser == expectedUser)
}
jsonに変換する()
jsonから変換する()