【问题标题】:Scala Play: How to map JSON array structure to Case ClassScala Play:如何将 JSON 数组结构映射到案例类
【发布时间】:2020-01-29 03:31:12
【问题描述】:

我对 Scala 和 Play 完全陌生,我偶然发现了以下问题:

鉴于以下 JSON 结构:

[
  {
    "name": "Adam",
    "age": 19
  },
  {
    "name": "Berta",
    "age": 22
  },
...
]

我想将此 JSON 映射到这样的案例类:

case class User(name: String, age: Int)
case class Users(users: Seq[User])

或至少类似于Seq[User]

不知道怎么遍历JsPath,因为没有key。

我试图定义一个隐式读取,但要么他无法解析符号“读取”,要么他找不到用户的隐式。

object User {
  implicit val reads: Reads[User] = Json.reads[User]
}
object Users {
  implicit val usersReads: Reads[Users] = (
    (JsPath).read[Seq[User]]
  )(Users.apply _)
}

如何将我的 JSON 映射到工作模型?

【问题讨论】:

    标签: json scala playframework


    【解决方案1】:

    这样的事情会起作用

    import play.api.libs.json._
    
    case class User(name: String, age: Int)
    case class Users(users: Seq[User])
    
    object User {
      implicit val reads = Json.reads[User]
    }
    
    object Users {
      implicit val reads: Reads[Users] = Reads {
          _.validate[Seq[User]].map(Users(_))
        }
    }
    

    【讨论】:

    • 它可以工作,但我的 IntelliJ 告诉我无法找到 Seq[User] 的隐含项。但是你能简要解释一下 map 部分的作用吗?谢谢!
    • 你甚至不需要第二个隐式对象。 Json.parse(s).as[Seq[User]] 也很好用。
    • 只是.map(users => Users(users))
    猜你喜欢
    • 2017-09-03
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 2010-11-16
    相关资源
    最近更新 更多