使用sprayJSON(scala)向现有JSON对象添加字段

使用sprayJSON(scala)向现有JSON对象添加字段,json,scala,spray,Json,Scala,Spray,我创建了一个case类来存储我的一些数据。case类如下所示: 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) 我在写/读

我创建了一个case类来存储我的一些数据。case类如下所示:

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中添加一个字段(,而不是在case类中),例如:“test”:“test”。我尝试使用以下代码编写自定义读/写操作:

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

  override def write(job: Job): JsValue = ??
}
我无法获得工作代码,有人能帮我解决这个问题吗


提前谢谢

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:我还没有编译代码,但是,整体实现看起来是这样的。

您能提供更多的上下文吗?在将JSON解组到case类时,是否希望忽略“test”属性?默认情况下忽略IIRC额外属性。或者,当属性被解组时,您需要某种方法来访问它吗?case类中有6个元素,但我想在JSON中添加第七个元素,而不将其添加到case类中。我的问题是:不写整个写/读过程,这可能吗?