如何使用play json将具有单个值的json转换为case类

Dar*_*ien 2 scala playframework playframework-2.3

我有问题找到如何将带有单个值的json doc转换为case类.这是json:

{
  "ax" : {
           "bx" : "value1",
           "by" : "value2
         }
}
Run Code Online (Sandbox Code Playgroud)

以下是案例类:

case class B(bx: String, by: String)
case class A(ax: B)
Run Code Online (Sandbox Code Playgroud)

以下是阅读:

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

object Implicits {
     implicit val bReads: Reads[B] = (
        ( __ \ "bx" ).read[String] ~
        ( __ \ "by" ).read[String]
     ) ( B.apply _ )    

     implicit val aReads: Reads[A] = (
        ( __ \ "ax" ).read[B]
     ) ( A.apply _ )
}
Run Code Online (Sandbox Code Playgroud)

第二个隐式不会使用以下错误进行编译:

Error:(X, Y) overloaded method value read with alternatives:
(t: B)play.api.libs.json.Reads[B] <and>
(implicit r: play.api.libs.json.Reads[B])play.api.libs.json.Reads[B]
cannot be applied to ((B, Option[String]) => A)
   ( __ \ "ax" ).read[B] 
Run Code Online (Sandbox Code Playgroud)

为了使它工作,我需要更改A类以获得另一个值:

case class A(ax: B, temp: Option[String])
Run Code Online (Sandbox Code Playgroud)

隐含阅读:

implicit val aReads: Reads[A] = (
   ( __ \ "ax" ).read[B] ~
   ( __ \ "temp" ).readNullable[String]
) ( A.apply _ )
Run Code Online (Sandbox Code Playgroud)

如何在不必向类中添加不存在的东西的情况下完成读取操作?有任何想法吗?

Lux*_*ode 14

Reads使用Play JSON,单个param案例类的实例有点尴尬,但以下内容应该有效

 implicit val reads: Reads[A] =
    (JsPath \ "ax").read[B].map(A.apply)
Run Code Online (Sandbox Code Playgroud)