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

时间:2016-05-30 10:35:25

标签: json scala spray

我制作了一个案例类来存储我的一些数据。案例类如下所示:

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 = ??
}

我无法获得正常工作的代码,有人可以帮我解决这个问题吗?

提前致谢!

1 个答案:

答案 0 :(得分:6)

jsonFormat6做的是创建自动生成的RootJsonFormat[Job]对象。您可以通过扩展RootJsonFormat[Job]来创建自定义实例。在这种情况下,您需要创建自定义实例来装饰自动生成的实例并在write方法上添加逻辑。

代码如下所示:

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