gpt4 book ai didi

json - 使用 Play Json 和 Salat 格式化可为空的 Seq 或对象列表

转载 作者:行者123 更新时间:2023-12-04 15:57:03 25 4
gpt4 key购买 nike

我想将 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"
}]
}

这些是类:
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
)

如何格式化可为空的“位置”?
implicit val format: Format[User] = (
(__ \ 'id).format[Int] and
(__ \ 'locations).formatNullable(Seq[Tag])
)

最佳答案

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))

这不会产生 locations序列化没有位置的用户时的值,但如果在这种情况下您想要一个空数组,则只需更改 Noneinmap 的第二个参数中至 Some(Seq.empty) .

关于json - 使用 Play Json 和 Salat 格式化可为空的 Seq 或对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29203069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com