[英]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.