我有一个包含一些选项的案例类:
case class Person (
name: String,
nationality: Option[String],
email: Option[String],
gender: Option[String]
)
使用play 2.1.3我正在尝试创建一个类似于:
的JSON{"name": "Joe", "email": "john@doe.com"}
对象:
val user = new User("Joe, None, Some("john@doe.com"), Some("male"))
使用:
val myJson = Json.obj("name" -> user.name,
"nationality" -> user.nationality, "email" -> user.email)
然而,我得到了:
{"name": "Joe", "nationality": null, "email": "john@doe.com"}
如何在JSON中避免使用null值的国籍?
答案 0 :(得分:4)
在意识到问题与播放JSON处理有关后,我设法找到了一个受I need advice on Play's Json and elegant Option handling in the Writes trait启发的解决方案。我不相信这是最优雅的解决方案,但它有效:
def writes(person: Person): JsValue = {
JsObject(
Seq[(String, JsValue)]() ++
Some(person.name).map("name" -> JsString(_)) ++
person.email.map("email" -> JsString(_))
)
}