scala - Is it possible to override the way play.api.libs.json write options? -
i work play! scala 2.4 , have several simple case class one:
case class a(a: option[string])
i override way json.tojson(a) works when option empty.
here have done:
implicit val awrites: writes[a] = json.writes[a] implicit def ow[t](implicit w: writes[t]): writes[option[t]] = writes { case none => jsstring("[]") case some(t) => json.tojson(t) } json.tojson(a(a = none)) mustbe json.parse("""{"a":"[]"}""")
but still parses class usual (i.e. {}
instead of {"a":"[]"}
like).
can in order make test pass?
this isn't possible using json.writes
macro, because written specially handle option
use readnullable[b]
. means need need use combinators define writes[a]
. unfortunately, defining writes
object 1 field little more cumbersome 1 has more.
implicit val awrites: writes[a] = writes(a => json.obj("a" -> a.a)) scala> json.tojson(a(none)) res8: play.api.libs.json.jsvalue = {"a":"[]"}
example multiple fields:
import play.api.libs.functional.syntax._ import play.api.libs.json._ case class a(a: option[string], b: int) implicit val awrites: writes[a] = ( (__ \ "a").write[option[string]] , (__ \ "b").write[int] )(unlift(a.unapply)) scala> json.tojson(a(none, 10)) res0: play.api.libs.json.jsvalue = {"a":"[]","b":10}
Comments
Post a Comment