我制作了一个案例类来存储我的一些数据。案例类如下所示:
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 = ??
}
我无法获得工作代码,有人可以帮我解决这个问题吗?
提前致谢!
最佳答案
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 - 使用 sprayJSON (scala) 将字段添加到现有的 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37523542/