Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Play framework: read Json containing null values

I'm trying to read Json data in my Play Scala program. The Json may contain nulls in some fields, so this is how I defined the Reads object:

  implicit val readObj: Reads[ApplyRequest] = (
      (JsPath \ "a").read[String] and
      (JsPath \ "b").read[Option[String]] and
      (JsPath \ "c").read[Option[String]] and
      (JsPath \ "d").read[Option[Int]]
    )  (ApplyRequest.apply _) 

And the ApplyRequest case class:

case class ApplyRequest ( a: String,
                          b: Option[String],
                          c: Option[String],
                          d: Option[Int],
                          )

This does not compile, I get No Json deserializer found for type Option[String]. Try to implement an implicit Reads or Format for this type.

How to declare the Reads object to accept possible nulls?

like image 411
ps0604 Avatar asked Feb 19 '16 13:02

ps0604


1 Answers

You can use readNullable to parse missing or null fields:

implicit val readObj: Reads[ApplyRequest] = (
  (JsPath \ "a").read[String] and
  (JsPath \ "b").readNullable[String] and
  (JsPath \ "c").readNullable[String] and
  (JsPath \ "d").readNullable[Int]
)  (ApplyRequest.apply _)
like image 175
Kolmar Avatar answered Oct 10 '22 12:10

Kolmar