簡體   English   中英

在案例類中使用json4s序列化None

[英]Serializing Nones with json4s in a case class

我無法弄清楚,說我有一個帶有Option的案例類,例如:

  case class Note(id: Int, noteA: Option[String], noteB: Option[String])

如果我按照Scalaltra指南的規定,嘗試使用json4s將其序列化為json,則我的case類中的所有None都將從輸出中刪除。 這樣下面的代碼

  protected implicit val jsonFormats: Formats = DefaultFormats

  before() {
    contentType = formats("json")
  }

  get("/MapWNone") {
    new Note(1, None, None)
  }

將會產生“ {{id”:1}”的輸出,我想有一個輸出:{“ id”:1,“ noteA”:null,“ noteB”:null}

我已經按照以下方式編寫了一個CustomSerializer:

class NoteSerializer extends CustomSerializer[Note](format => ({
     |   case jv: JValue =>
     |     val id = (jv \ "id").extract[Int]
     |     val noteA = (jv \ "noteA").extract[Option[String]]
     |     val noteB = (jv \ "noteB").extract[Option[String]]
     |     Note(id, noteA, noteB)
     | }, { case n: Note => ("id" -> n.id) ~ ("noteA" -> n.noteA) ~ ("noteB" -> n.noteB) }))

與默認格式化程序的功能相同。

我認為將最后一行更改為這樣可以工作

case n: Note => ("id" -> n.id) ~ ("noteA" -> n.noteA.getOrElse(JNull)) ~ ("noteB" -> n.noteB.getOrElse(JNull))

但不會編譯。

No implicit view available from java.io.Serializable => org.json4s.JsonAST.JValue

我想知道如何在noteA和noteB字段中匹配Some / None,並在其中一個成員都為None的情況下返回JNull。

謝謝

得到它了:

case n: Note => ("id" -> n.id) ~ ("noteA" -> n.noteA.getOrElse(null)) ~ ("noteB" -> n.noteB.getOrElse(null)) }))

忍耐是一種美德,不是我的一種。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM