2014-08-28 56 views
2

我不知道這一點,說我有一個在它選擇的情況下類,如:在一個案例類json4s序列化諾內斯

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

如果我試圖序列化使用json4s以JSON作爲被禁通過Scalaltra指南,我的case類中的任何Nones都會從輸出中移除。使得下面的代碼

protected implicit val jsonFormats: Formats = DefaultFormats 

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

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

會產生 「{」 ID 「:1}」 的輸出,我想有一個輸出,如:{ 「ID」:1, 「注意事項】」:空, 「noteB」:空}

我寫了一個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 

我不知道我怎麼會在和注意事項】田noteB一個有些/沒有做匹配,並且在任成員的無的情況下返回JNull。

感謝

回答

0

得到它:

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

耐心是一種美德,只是沒有我的。