播放json变形金刚地图可选字段

播放json变形金刚地图可选字段,json,scala,playframework,play-json,Json,Scala,Playframework,Play Json,我有以下play framework 2.3 json transformer val transAddress = ( (__ \ 'address \ 'line1).json.copyFrom( (__ \ 'line1).json.pick ) and (__ \ 'address \ 'line2).json.copyFrom( (__ \ 'line2).json.pick ) and (__ \ 'address \ 'line3).json.copyFrom( (__

我有以下play framework 2.3 json transformer

val transAddress = (
  (__ \ 'address \ 'line1).json.copyFrom( (__ \ 'line1).json.pick ) and
  (__ \ 'address \ 'line2).json.copyFrom( (__ \ 'line2).json.pick ) and
  (__ \ 'address \ 'line3).json.copyFrom( (__ \ 'line3).json.pick ) and

  (__ \ 'address \ 'line4).json.copyFrom( (__ \ 'line4).json.pick ) and

  (__ \ 'address \ 'postcode).json.copyFrom( (__ \ 'postcode).json.pick ) reduce
)
因此:

{
    line1: "My Street",
    line2: "My Borough",
    line3: "My Town",
    line4: "My County"
}
应转变为:

{
    address: {
        line1: "My Street",
        line2: "My Borough",
        line3: "My Town",
        line4: "My County"
    }
}
{
    address: {
        line1: "My Street",
        line2: "My Borough",
        line3: "My Town"
    }
}
我的问题是,在源json模型中,line4是可选的,所以我只想将其映射到address.line4(可选)。因此:

{
    line1: "My Street",
    line2: "My Borough",
    line3: "My Town"
}
还应转变为:

{
    address: {
        line1: "My Street",
        line2: "My Borough",
        line3: "My Town",
        line4: "My County"
    }
}
{
    address: {
        line1: "My Street",
        line2: "My Borough",
        line3: "My Town"
    }
}
我不知道如何用这些变压器做到这一点,在谷歌搜索了很多次后,也没有发现类似的问题

谢谢!
Nic

选项
可读取为空

import play.api.libs.functional.syntax._
import play.api.libs.json._
case class Address(line1: String, line2: String, line3: String, line4: Option[String])

object Address {
  implicit val reads: Reads[Address] = (
      (JsPath \ "line1").read[String] and
      (JsPath \ "line2").read[String] and
      (JsPath \ "line3").read[String] and
      (JsPath \ "line4").readNullable[String]
    )(Address.apply _)
}

若你们能提供一个JSON的示例,以及它应该转换成什么,那个将很有帮助。谢谢,我补充道examples@nfvindaloo我的答案对你有用吗?这很相似,但我需要的是这样一个转换器:特别是copyFrom方法,它不喜欢ReadNullable,它不能解决关于“转换器”的问题。这里并不是问你如何往返于一个案例类。