0

私は次のケースクラスを持っています:

case class User(name: String, age: String)

そのための JSONReadsコンバーターを実装しようとしているので、次のことができます。

val user = userJson.validate[User]

…しかし、受信する JSON の構造はわずかに異なります。

{ "age": "12", "details": { "name": "Bob" } }

ReadsJSONコンバーターを実装するにはどうすればよいですか?

4

1 に答える 1

1

サブパスを解析するコンビネータを使用してこれを行うことができます。

import play.api.libs.json._
import play.api.libs.functional.syntax._

case class User(name: String, age: String)

val js = Json.parse("""
    { "age": "12", "details": { "name": "Bob" } }
""")

implicit val reads: Reads[User] = (
    (__ \ "details" \ "name").read[String] and
    (__ \ "age").read[String]
)(User.apply _)    

scala> js.validate[User]
res2: play.api.libs.json.JsResult[User] = JsSuccess(User(Bob,12),)
于 2015-08-01T16:30:00.480 に答える