Scala用JSON.writes[A]保留单词作为JSON字段名(相当于@SerializedName)



我正在用Play 2.4.3&Scala,提供了一个用Json.writes创建的隐式Writes[DeviceJson]

import play.api.libs.json.Json
case class DeviceJson(name: String, serial: Long, type: String)
object DeviceJson {
  implicit val writes = Json.writes[DeviceJson]
}

当然,由于我试图在case类中使用保留字type作为字段名,所以上面的内容无法编译。

在这种情况下,输出JSON字段名(如typematch)的最简单方法是什么?

例如,对于Java和Gson,使用自定义JSON字段名(与代码中的字段名不同)对于@SerializedName注释来说是微不足道的。与@JsonProperty的Jackson相似。

我知道我可以通过推出自己的Writes实现来做到这一点:

case class DeviceJson(name: String, serial: Long, deviceType: String)
object DeviceJson {
  implicit val writes = new Writes[DeviceJson] {
    def writes(json: DeviceJson) = {
      Json.obj(
        "name" -> json.name,
        "serial" -> json.serial,
        "type" -> json.deviceType
      )
    }
  }
}

但这是笨拙和重复的,尤其是当类有很多字段时。有没有更简单的方法?

在您的case类中,您可以对字段名称使用backtick:

case class DeviceJson(name: String, serial: Long, `type`: String)

有了这个,您的Writes应该可以在上运行

最新更新