JSON 单个 属性 案例的格式 类
JSON format for Single property case classes
给出
case class Location(lat: Double, long: Double)
case class Resident(location: Location)
为 Resident
编写 JSON 格式化程序的最简单方法是什么
我正在尝试使用 FunctionalBuilder
即
val residentFormats: Format[Resident] = (
(JsPath \ "location").format[Location]
) (Resident.apply, unlift(Resident.unapply))
但事实证明,将其与单个 属性 案例 class 一起使用并不容易。我随后的尝试往往涉及比我认为必要的代码更多的代码。
希望得到一些指点
只需使用:
object Resident {
implicit val format: OFormat[Resident] = Json.format[Resident]
}
或者您可以拆分定义:
object Resident {
implicit val reads: Reads[Resident] = Json.reads[Resident]
implicit val writes: OWrites[Resident] = Json.writes[Resident]
}
可以定义reads
,自己写:
object Resident {
implicit val reads: Reads[Resident] = json => {
(json \ "location").validate[Location].map(Resident(_))
}
implicit val writes: OWrites[Resident] = resident => Json.obj("localtion" -> resident.location)
}
注意:如果需要将名称从驼峰式转换为underscore_keys, 你可以定义隐式 JsonConfiguration
:
object Resident {
implicit val jsonConfig = JsonConfiguration(SnakeCase)
implicit val format: OFormat[Resident] = Json.format[Resident]
}
给出
case class Location(lat: Double, long: Double)
case class Resident(location: Location)
为 Resident
我正在尝试使用 FunctionalBuilder
即
val residentFormats: Format[Resident] = (
(JsPath \ "location").format[Location]
) (Resident.apply, unlift(Resident.unapply))
但事实证明,将其与单个 属性 案例 class 一起使用并不容易。我随后的尝试往往涉及比我认为必要的代码更多的代码。
希望得到一些指点
只需使用:
object Resident {
implicit val format: OFormat[Resident] = Json.format[Resident]
}
或者您可以拆分定义:
object Resident {
implicit val reads: Reads[Resident] = Json.reads[Resident]
implicit val writes: OWrites[Resident] = Json.writes[Resident]
}
可以定义reads
,自己写:
object Resident {
implicit val reads: Reads[Resident] = json => {
(json \ "location").validate[Location].map(Resident(_))
}
implicit val writes: OWrites[Resident] = resident => Json.obj("localtion" -> resident.location)
}
注意:如果需要将名称从驼峰式转换为underscore_keys, 你可以定义隐式 JsonConfiguration
:
object Resident {
implicit val jsonConfig = JsonConfiguration(SnakeCase)
implicit val format: OFormat[Resident] = Json.format[Resident]
}