使用sprayJSON(scala)向现有JSON对象添加字段
我创建了一个case类来存储我的一些数据。case类如下所示:使用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 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类中。我的问题是:不写整个写/读过程,这可能吗?