我正在以以下方式在Play 2.4.3&Scala中生成JSON,提供了使用Writes[DeviceJson]创建的隐式Json.writes

import play.api.libs.json.Json

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

object DeviceJson {
  implicit val writes = Json.writes[DeviceJson]
}

当然,以上内容无法编译,因为我试图在案例类中使用保留字type作为字段名称。

在这种情况下,最简单的输出JSON字段名称(例如typematch)(我不能用作Scala字段名称)的方法是什么?

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

我知道我可以通过滚动自己的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
      )
    }
  }
}

但这是笨拙且重复的,特别是在类(class)有很多领域的情况下。有没有更简单的方法?

最佳答案

在您的案例类中,您可以对字段名称使用反引号:

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

这样,您的Writes应该可以工作了

关于json - Scala保留字作为带有Json.writes [A]的JSON字段名称(与@SerializedName等效的 Play 方式),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34017680/

10-15 05:50