2016-05-30 118 views
1

我做了一個case類來存儲我的一些數據。此案類如下所示:使用sprayJSON(scala)添加字段到現有的JSON對象

case class Job(id: Option[Int], title: String, description: Option[String], 
       start: Date, end: Option[Date], customerId: Int) 

我用下面的格式寫/讀我的JSON對象:

implicit val jobFormat = jsonFormat6(Job.apply) 

我有一些問題,讀/寫,因爲我需要向JSON添加一個字段(,但不添加到案例類),例如:「test」:「test」。我試着寫下面的代碼定製的讀/寫:

implicit object jobFormat extends RootJsonFormat[Job] { 
    override def read(json: JsValue): JobRow = ??? 

    override def write(job: Job): JsValue = ?? 
} 

我無法得到的工作代碼,可以有人幫助我解決這個問題?

在此先感謝!

+0

您能否提供更多的上下文?當JSON解組到case類時,你是否希望忽略「test」屬性? IIRC額外的屬性在默認情況下被忽略。或者在解組時需要某種方式訪問​​該屬性? – devkat

+0

那麼案例類中有6個元素,但我想在JSON中添加第七個元素而不將其添加到案例類。 我的問題是:這可能沒有寫整個寫/讀? –

回答

3

jsonFormat6所做的是創建您自動生成的對象RootJsonFormat[Job]。您可以通過擴展RootJsonFormat[Job]來創建自定義實例。在這種情況下,您需要創建自定義實例來裝飾自動生成的實例並在寫入方法上添加邏輯。

的代碼看起來就像這樣:

implicit object JobFormat extends RootJsonFormat[Job] { 
    // to use autogenerated jobFormat 
    val jobFormat = jsonFormat6(Job.apply) 

    // leave read at it is 
    override def read(json: JsValue): JobRow = 
    jobFormat.read(json) 

    // Change write to add your custom logic 
    override def write(job: Job): JsValue = { 
    val json = jobFormat.write(job).asJsonObject 
    JsObject(json.fields + ("test" -> JsString("test"))) 
    } 
} 

PS:我沒有編譯的代碼,但是,整體實施,將這個樣子。

+0

謝謝,這解決了我的問題! –

相關問題