使用play framework 2.1在JsObject for Option中的空值

时间:2013-09-10 17:22:05

标签: json scala playframework-2.1

我有一个包含一些选项的案例类:

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值的国籍?

1 个答案:

答案 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(_))
  )
}