Skip to content

Instantly share code, notes, and snippets.

@mandubian
Created February 22, 2013 10:48
Show Gist options
  • Save mandubian/5012535 to your computer and use it in GitHub Desktop.
Save mandubian/5012535 to your computer and use it in GitHub Desktop.
Play Json Reads expecting One single field
scala> import play.api.data.validation._
scala> ((__ \ "field1").readNullable[String] and (__ \ "field2").readNullable[Int]).tupled.filter(ValidationError("unexpected result")){ case( Some(x), None ) => true; case ( None, Some(x) ) => true; case _ => false }
res18: play.api.libs.json.Reads[(Option[String], Option[Int])] = play.api.libs.json.Reads$$anon$8@10654cd8
scala> Json.obj("field1" -> "toto").validate(res18)
res19: play.api.libs.json.JsResult[(Option[String], Option[Int])] = JsSuccess((Some(toto),None),)
scala> Json.obj("field2" -> 5).validate(res18)
res20: play.api.libs.json.JsResult[(Option[String], Option[Int])] = JsSuccess((None,Some(5)),)
scala> Json.obj("field2" -> "toto").validate(res18)
res21: play.api.libs.json.JsResult[(Option[String], Option[Int])] = JsError(List((/field2,List(ValidationError(validate.error.expected.jsnumber,WrappedArray())))))
scala> Json.obj("field1" -> "toto", "field2" -> 5).validate(res18)
res22: play.api.libs.json.JsResult[(Option[String], Option[Int])] = JsError(List((,List(ValidationError(unexpected result,WrappedArray())))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment