如果案例类只有一个字段,如何将json转换为案例类
在播放2.1读取是用来编组Json的对象。 但是,如果案例类只有一个字段,我怎么能做到这一点。 为更多领域工作的ideom不起作用,因为一个领域“和”不使用。 所以我没有得到一个FunctionBuilder。
下面的代码给我一个types不匹配。 我该如何解决这个问题?
case class Data(stamm: Seq[String]) implicit val dataReads = ( (__ \ "stamm").read(Reads.list[String]) )(Data)
Json组合器不适用于单个字段的类。
帕斯卡(这个API的作者)在这里解释了这种情况https://groups.google.com/forum/?fromgroups=#!starred/play-framework/hGrveOkbJ6U
有一些解决方法可行,就像这样:
case class A(value: List[Int]) val areads = (__ \ 'value).read[List[Int]].map{ l => A(l) } // covariant map
正如Julien回答的那样,您可以使用以下方法阅读单个字段的案例类:
case class Person(name: String) val personReads: Reads[Person] = (__ \ "name").read[String].map { name => Person(name) }
只是补充,如果你想写:
val personWrites: Writes[Person] = (__ \ "name").write[String].contramap { (person: Person) => person.name }
或格式(读写):
val personFormat: Format[Person] = (__ \ "name").format[String].inmap(name => Person(name), (person: Person) => person.name)
对于写入和格式化,你必须导入这个:
import play.api.libs.functional.syntax._
基于@ yokomizor的回答,我find了最简单的解决scheme来创build一个Formatter
case class Person(name: String) val personFormatter: Format[Person] = (__ \ "full_name").format[String].inmap(Person.apply, unlift(Person.unapply))
即使比接受的更简单的解决scheme:
case class A(value: String) val reads = (__ \ "key").read[String].map(A.apply)