我制作了一个案例类来存储我的一些数据。案例类如下所示:
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 :(得分: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:我还没有编译代码,但是,整体实现看起来像这样。