ang*_*okh 4 json scala casbah salat playframework-2.2
我想将json转换为Salat模型.我正在使用Play 2.X Scala Json.我找不到任何格式化可空的Seq的文档.根据https://github.com/novus/salat/wiki/SupportedTypes,我不能使用Option [Seq]或Option [List].
以下json是好的,但有时"位置"可能会丢失.
{
"id": 581407,
"locations": [
{
"id": 1692,
"tag_type": "LocationTag",
"name": "san francisco",
"display_name": "San Francisco"
}]
}
Run Code Online (Sandbox Code Playgroud)
这些是类:
case class User(
var id: Int,
var locations: Seq[Tag] = Seq.empty
)
case class Tag(
id: Int,
tag_type:String,
name:String,
display_name:String
)
Run Code Online (Sandbox Code Playgroud)
如何格式化可空的"位置"?
implicit val format: Format[User] = (
(__ \ 'id).format[Int] and
(__ \ 'locations).formatNullable(Seq[Tag])
)
Run Code Online (Sandbox Code Playgroud)
Format是一个不变的函子,因此您可以使用inmap将Option[Seq[Tag]]格式更改为以下格式Seq[Tag]:
import play.api.libs.functional.syntax._
import play.api.libs.json._
implicit val formatTag: Format[Tag] = Json.format[Tag]
implicit val formatUser: Format[User] = (
(__ \ 'id).format[Int] and
(__ \ 'locations).formatNullable[Seq[Tag]].inmap[Seq[Tag]](
o => o.getOrElse(Seq.empty[Tag]),
s => if (s.isEmpty) None else Some(s)
)
)(User.apply, unlift(User.unapply))
Run Code Online (Sandbox Code Playgroud)
locations在序列化没有位置的用户时,这不会产生值,但如果你想在这种情况下使用空数组,你只需None将第二个参数更改inmap为Some(Seq.empty).
| 归档时间: |
|
| 查看次数: |
988 次 |
| 最近记录: |