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 に答える