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

Add field to existing JSON object with sprayJSON (scala)

我做了一个案例 class 来存储我的一些数据。案例 class 如下所示:

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

我对 write/read 我的 JSON 对象使用了以下格式化程序:

implicit val jobFormat = jsonFormat6(Job.apply)

我在使用 write/read 时遇到了一些问题,因为我需要向 JSON 添加一个字段( 但 class),例如:"test":"test"。我尝试使用以下代码编写自定义 read/write:

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