Рассмотрим следующее JSON
{
"a": "{\"b\": 12, \"c\": \"test\"}"
}
Я хотел бы определить обобщенные c чтения Reads[Outer[T]]
для этого вида сериализованных Json
import play.api.libs.json.{Json, Reads, __}
final case class Outer[T](inner: T)
final case class SpecializedInner(b: Int, c: String)
object SpecializedInner {
implicit val reads: Reads[SpecializedInner] = Json.reads[SpecializedInner]
}
object Outer {
implicit def reads[T](implicit readsT: Reads[T]): Reads[Outer[T]] = ???
}
Как могу ли я достичь своей цели? Я попытался выполнить flatMap для чтения строк для поля "outer.a", но застрял, так как не могу произвести чтение [T] из проверенного JSON
object Outer {
implicit def reads[T](implicit readsT: Reads[T]): Reads[Outer[T]] =
(__ \ "a").read[String].flatMap(x => Json.parse(x).validate[T])
}