首页 > 解决方案 > 如何将 arry:string 转换为 Scala 中的特定模型

问题描述

我想转换array: StringSeq[Message]...

案例类:

case class Message(name: String, sex: String)

资源:

[
    { "name": "Bean",
      "sex": "F"
    },
    {
      "name": "John",
      "sex": "M"
    }
]

目的地

Seq[Person]

怎么转换??代码...

标签: jsonscala

解决方案


您需要使用某种解码器/反序列化器将字符串解码为case class. scala中有大量的解码器。我最喜欢的一个是circe,因为它很实用,也可以很好地与 scalajs 配合使用。

import io.circe._, io.circe.generic.auto._, io.circe.parser._, io.circe.syntax._

case class Message(name: String, sex: String)

val encoded =
  """
    |[
    |    { "name": "Bean",
    |      "sex": "F"
    |    },
    |    {
    |      "name": "John",
    |      "sex": "M"
    |    }
    |]
  """.stripMargin

val decoded: Either[Error, List[Message]] = decode[List[Message]](encoded)

decoded match {
  case Right(e) => println("success: " + e)
  case Left(l) => println("failure: "+ l)
}

输出:

success: List(Message(Bean,F), Message(John,M))

如果您正在寻找与 java 兼容的简单明了,请查看https://github.com/FasterXML/jackson-module-scala

另请参阅:Scala 将 JSON 反序列化为 Collection


推荐阅读