简体   繁体   中英

JSON implicit Reads/Writes in Playframerowk with one element not working

Say I have to classes that I will be using it for read and write JSON

case class OrganizationData(var kind: Option[String],var id: Option[String],var organizationReference: OrganizationReferenceData,var objectHash: Option[String],var friendlyName: Option[String])



case class OrganizationReferenceData(var organizationId:String)

The following are the read and write

implicit val organizationWrites = (
(__ \ "kind").writeNullable[String] and
  (__ \ "id").writeNullable[String] and
  (__ \ "organizationReference").write[OrganizationReferenceData] and
  (__ \ "objectHash").writeNullable[String] and
  (__ \ "friendlyName").writeNullable[String]
) ( unlift( OrganizationData.unapply ) )

  implicit val OrganizationReferenceDataWrites:Writes[OrganizationReferenceData] = (
(__ \ "organizationId").write[String]
) ( unlift( OrganizationReferenceData.unapply ) )

when I try to compile this I am getting the following error.

Error:(54, 34) overloaded method value write with alternatives:
(t: String)(implicit w:   play.api.libs.json.Writes[String])play.api.libs.json.OWrites[play.api.libs.json.JsValue] <and>
(implicit w: play.api.libs.json.Writes[String])play.api.libs.json.OWrites[String]
cannot be applied to (config.core.OrganizationReferenceData => String)
(__ \ "organizationId").write[String]
                             ^

Am I missing some thing here? One weird thing that I have seen is if I add another field in "OrganizationReferenceDataWrites" class and have the write element it compiles. SO if we cannot have a single element that what is the best practice to do it?

I'm not sure why you are getting that message, but an alternative way to do it may be:

implicit val OrganizationReferenceDataWrites = new Writes[OrganizationReferenceData] {
  def writes(organizationReferenceData: OrganizationReferenceData) = Json.obj(
    "organizationId" -> organizationReferenceData.organizationId)
}

Caveat: I don't know my combinators well enough to know if this is exactly equivalent.

BTW Are you using mutable ( var ) variables for a reason?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM