Jon*_*nik 5 json scala playframework playframework-2.0
我正在以下列方式使用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]
}
Run Code Online (Sandbox Code Playgroud)
当然,上面的代码没有编译,因为我试图type在case类中使用保留字作为字段名.
在这种情况下,输出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
)
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这是笨拙和重复的,特别是如果班级有很多领域.有更简单的方法吗?
vde*_*gue 13
在您的案例类中,您可以使用反引号作为字段名称:
case class DeviceJson(name: String, serial: Long, `type`: String)
Run Code Online (Sandbox Code Playgroud)
有了这个,你Writes应该工作