我正在使用play-json的宏来定义用于序列化
JSON的隐式写入.但是,默认情况下,play-json将忽略“选项”字段设置为“无”的字段.有没有办法更改默认值,以便它输出null?我知道这是可能的,如果我定义了我自己的写入定义,但我有兴趣通过宏来减少样板代码.
例
case class Person(name: String,address: Option[String]) implicit val personWrites = Json.writes[Person] Json.toJson(Person("John Smith",None)) // Outputs: {"name":"John Smith"} // Instead want to output: {"name":"John Smith","address": null}
解决方法
Json.writes宏为可选字段生成一个
writeNullable[T]
.像你知道(或不),writeNullable [T]如果值为None,则忽略该字段,而write [Option [T]]会生成一个空字段.
定义自定义作者是唯一可以获得此行为的选项.
( (__ \ 'name).write[String] and (__ \ 'address).write[Option[String]] )(unlift(Person.unapply _))