加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala将单词保留为JSON字段名称,带有Json.writes [A](等效于@Ser

发布时间:2020-12-16 18:44:21 所属栏目:安全 来源:网络整理
导读:我正在使用Play 2.4.3amp ;;制作 JSON. Scala以下列方式提供了一个用Json.writes创建的隐式Writes [DeviceJson]. import play.api.libs.json.Jsoncase class DeviceJson(name: String,serial: Long,type: String)object DeviceJson { implicit val writes =
我正在使用Play 2.4.3&amp ;;制作 JSON. 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类中使用保留字类型作为字段名.

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

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

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

case class DeviceJson(name: String,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 class DeviceJson(name: String,`type`: String)

有了这个,你的写作应该有效

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读