【问题标题】:Parsing a JSArray object into a list of objects in Scala Play将 JSArray 对象解析为 Scala Play 中的对象列表
【发布时间】:2014-08-07 22:02:37
【问题描述】:

我有以下 JSON:

[{"id_str":"67979542","name":"account"}, {"id_str":"12345678","name":"account2"}, {"id_str":"3423423423","名称":"account3"}]

已被解析为一个包含 3 个元素的 play.api.libs.json.JsArray 对象。

我想使用以下代码将此 JsArray 解析为我的自定义对象 Group:

 case class Group(id: String, name: String)

  implicit val twitterGroupReads: Reads[Group] = (
    (JsPath \\ "id_str").read[String] and
    (JsPath \\ "name").read[String]
    )(Group.apply _)

但我不知道如何使用该库从数组中获取所有元素并将它们解析到我的自定义对象中。

【问题讨论】:

    标签: json scala playframework playframework-json


    【解决方案1】:

    Play JSON 框架有a number of built-in objects 用于处理JSON,其中Reads.traversableReads 将被隐式用于反序列化可以隐式找到Reads 对象的其他类型的集合。你写了一个正确的Reads 对象。因此,除非我遗漏了什么,否则你很高兴:

    scala> import play.api.libs.json._
    import play.api.libs.json._
    
    scala> import play.api.libs.functional.syntax._
    import play.api.libs.functional.syntax._
    
    scala> case class Group(id: String, name: String)
    defined class Group
    
    scala> implicit val twitterGroupReads: Reads[Group] = (
         |     (JsPath \\ "id_str").read[String] and
         |     (JsPath \\ "name").read[String]
         |     )(Group.apply _)
    twitterGroupReads: play.api.libs.json.Reads[Group] = play.api.libs.json.Reads$$anon$8@f2fae02
    
    scala> val json = Json.parse("""[{"id_str":"67979542","name":"account"}, {"id_str":"12345678","name":"account2"}, {"id_str":"3423423423","name":"account3"}]""")
    json: play.api.libs.json.JsValue = [{"id_str":"67979542","name":"account"},{"id_str":"12345678","name":"account2"},{"id_str":"3423423423","name":"account3"}]
    
    scala> json.as[Seq[Group]]
    res0: Seq[Group] = List(Group(67979542,account), Group(12345678,account2), Group(3423423423,account3))
    

    【讨论】:

    • 补充一点:如果您可以在 JSON 和 Scala 类中使用完全相同的字段名称,那么自定义 Reads 实现不是必需的,并且您的 JSON 转换代码变得非常简单:implicit val reads = Json.reads[Group]。示例:stackoverflow.com/a/34618829/56285
    猜你喜欢
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 2015-08-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多