首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scala保留字为Json.writes[A]的JSON字段名(对@SerializedName的播放等效)

Scala保留字为Json.writes[A]的JSON字段名(对@SerializedName的播放等效)
EN

Stack Overflow用户
提问于 2015-12-01 10:08:47
回答 1查看 1.8K关注 0票数 5

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

代码语言:javascript
复制
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 )的最简单方法是什么,而我不能使用它们作为Scala字段名?

例如,对于Java和Gson,使用自定义的JSON字段名(与代码中的字段名不同)对于@SerializedName注释来说非常简单。同样,在杰克逊与@JsonProperty

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

代码语言:javascript
复制
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
      )
    }
  }
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-01 11:05:34

在case类中,可以对字段名使用回勾符:

代码语言:javascript
复制
case class DeviceJson(name: String, serial: Long, `type`: String)

这样,您的Writes就可以工作了。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34017680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档