4

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

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

4

1 回答 1

4

在意识到问题与播放 JSON 处理有关后,我设法找到了一个解决方案,灵感来自我需要有关 Play 的 Json 的建议和 Writes trait 中优雅的 Option 处理。我不相信这是最优雅的解决方案,但它有效:

def writes(person: Person): JsValue = {
  JsObject(
    Seq[(String, JsValue)]() ++
    Some(person.name).map("name" -> JsString(_)) ++
    person.email.map("email" -> JsString(_))
  )
}
于 2013-09-12T19:21:35.580 回答