scala web
Play Framework
→ Json parsing
play-json allows to create complex tree by nesting case classes.
import play.api.libs.json.Reads._
import play.api.libs.json._
import play.api.libs.functional.syntax._
case class Overall(overall: Double)
case class Data(association_score: Overall)
case class RootJson(from: Int, total: Int, data: Seq[Data])
// this for simple element case class
implicit val overallReads: Reads[Overall] =
(JsPath \ "overall").read[Double].map(Overall)
implicit val dataReads: Reads[Data] =
(JsPath \ "association_score").read[Overall].map(Data)
// this for multiple element case class
implicit val rootJsonReads: Reads[RootJson] = (
(JsPath \ "from").read[Int] and
(JsPath \ "total").read[Int] and
(JsPath \ "data").read[Seq[Data]]
)(RootJson.apply _)
then this json can be parsed:
val json: String = """
{
"total" : 1000,
"from" : 10,
"data" : [ {
"association_score" : {
"overall" : 40.0
}
} ]
}
"""
Json.parse(json).validate[RootJson] match {
case JsSuccess(rootJson, _) => {
val _: RootJson = rootJson
rootJson
}
case e: JsError => {
// error handling flow
throw new Exception
}
}
This page was last modified: