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

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

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

提前致谢!

最佳答案

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/

相关文章:

java - 如何在spring mvc中将用户表单数据发送到服务器

javascript - JSON.stringify 看似缩写值

json - 将 jq 查询的结果聚合到单个数组中

java - Scala 是否具有与 Haskell 的 Prelude.show 等效的功能?

javascript - 缺乏对使用 Play+Scala 与 JavaScript 的实际见解

scala - 如何解析包含 "="以外的运算符的喷雾路由中的参数?

ios - 从 Testflight 下载应用程序时,我的 JSON 方法不起作用

scala - 使用 scalatest 时 sbt 中没有 Log4J 输出

scala - 为什么 Spray-can 服务器不响应 http 请求?

scala - 使用 Http header 对 spray-client 的响应进行解码