如果案例类只有一个字段,如何将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)