我使用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]
}当然,由于我试图在case类中使用保留字type作为字段名,所以上面的代码不会编译。
在这个场景中,输出JSON字段名(如type或match )的最简单方法是什么,而我不能使用它们作为Scala字段名?
例如,对于Java和Gson,使用自定义的JSON字段名(与代码中的字段名不同)对于@SerializedName注释来说非常简单。同样,在杰克逊与@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
)
}
}
}但这是笨拙和重复的,特别是当类有很多字段时。有更简单的方法吗?
发布于 2015-12-01 11:05:34
在case类中,可以对字段名使用回勾符:
case class DeviceJson(name: String, serial: Long, `type`: String)这样,您的Writes就可以工作了。
https://stackoverflow.com/questions/34017680
复制相似问题