方法的 Scala 泛型用法 + json4s 解析

Scala generics usage for methods + json4s parsing

我不确定这是否可以实现,而且我对泛型在 Scala 中的工作方式有非常基本的了解。但我想知道这是否可能。 假设我有一个方法:

case class Person(id:String,name:String)
case class Student(id:String,name:String, class:String)

    def convertToJson[A](fileName:String):{
     //read file
     parse[A]
    }

是否可以编写这种通用方法,根据我在调用 convertToJson 方法时发送的 class 的类型来解析 json? 类似于:

convertToJson[Student](fileName)
convertToJson[Person](fileName)

顺便说一句,上面的代码给了我一个:

No Manifest available for A. error.

使用 json4s 进行解析。 感谢任何帮助。

这会将 JSON 字符串转换为 case class

import org.json4s._
import org.json4s.jackson.JsonMethods._

def convertToJson[T](json: String)(implicit fmt: Formats = DefaultFormats, mf: Manifest[T]): T =
  Extraction.extract(parse(json))

定义后,您可以将适当的字符串解析为所需的类型:

case class Person(id: String, name: String)
case class Student(id: String, name: String, `class`: String)

val person = convertToJson[Person]("""{"name":"Jane","id":45}""")
val student = convertToJson[Student]("""{"name":"John","id":63, "class": "101"}""")

请注意,这将忽略与 case class 中的字段不匹配的 JSON 数据。如果一个字段在 JSON 中是可选的,请将其设为 case class 中的 Option,如果该字段不存在,您将得到 None