json - soporta - optimizar consultas mysql explain
Cómo convertir json a la clase de caso cuando la clase de caso tiene solo un campo (4)
Basado en la respuesta de @ yokomizor, encontré la solución más simple para crear un Formatter
para ser
case class Person(name: String)
val personFormatter: Format[Person] =
(__ / "full_name").format[String].inmap(Person.apply, unlift(Person.unapply))
En el juego 2.1, las lecturas se usan para asignar objetos a Json. Pero, ¿cómo puedo hacer esto cuando la clase de caso tiene solo un campo? El ideom que funciona para más campos no funciona, ya que con un campo ''y'' no se usa. Por lo tanto, no obtengo un FunctionBuilder.
El siguiente código me da una discrepancia de tipo. ¿Cómo puedo arreglar esto?
case class Data(stamm: Seq[String])
implicit val dataReads = (
(__ / "stamm").read(Reads.list[String])
)(Data)
Como contestó Julien, puedes leer clases de casos individuales usando esto:
case class Person(name: String)
val personReads: Reads[Person] =
(__ / "name").read[String].map { name => Person(name) }
Solo un complemento, si quieres escribir:
val personWrites: Writes[Person] =
(__ / "name").write[String].contramap { (person: Person) => person.name }
O formato (leer y escribir):
val personFormat: Format[Person] =
(__ / "name").format[String].inmap(name => Person(name), (person: Person) => person.name)
Para escribir y formatear, debe importar esto:
import play.api.libs.functional.syntax._
Incluso una solución más simple que la aceptada:
case class A(value: String)
val reads = (__ / "key").read[String].map(A.apply)
Los combinadores Json no funcionan para la clase de caja de campo individual.
Pascal (autor de esta API) explicó esta situación aquí https://groups.google.com/forum/?fromgroups=#!starred/play-framework/hGrveOkbJ6U
Hay algunas soluciones que funcionan, como esta:
case class A(value: List[Int])
val areads = (__ / ''value).read[List[Int]].map{ l => A(l) } // covariant map