作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个JSON
字符串,并且创建了一个函数,该函数使用Scala JSON
将此case class
解析为对象。我编写了以下代码,以一种通用的方式对其进行了解析。但是,它给了我一个错误:
def getJsonObj[T](jsonString:String): T = {
implicit val formats: DefaultFormats.type = DefaultFormats
parse(jsonString).extract[T]
}
Error:(19, 32) No Manifest available for T.
parse(jsonString).extract[T] Error:(19, 32) not enough arguments for
method extract: (implicit formats: org.json4s.Formats, implicit mf:
scala.reflect.Manifest[T])T. Unspecified value parameter mf.
parse(jsonString).extract[T]
case class
传递给该函数。这似乎是一个常见的问题,但是由于我是Scala的新手,所以我无法使用可用的答案来解决它。
try-catch
以查看其是否正确解析?
最佳答案
我认为这个答案解决了您的问题Scala: “No manifest available for type T”。通过隐式传递 list 类型方法很容易解决。我添加了代码示例和用于错误处理的简单函数。
val jsonStr: String = """{"airports":[{"name":"sfo","score":1},{"name":"phx","score":1},{"name":"sjc","score":1}]}"""
case class AirPortScores(name: String, score: Double)
case class JsonRulesHandler(airports: List[AirPortScores])
val json: JsonRulesHandler = getJsonObj[JsonRulesHandler](jsonStr)
println(json)
def getJsonObj[T](jsonString:String)(implicit m: Manifest[T]): T = {
extractFrom(jsonString) match {
case Success(jsonParsed) ⇒
jsonParsed
case Failure(exc) ⇒
throw new IllegalArgumentException(exc)
}
}
private def extractFrom[T](jsonString:String)(implicit m: Manifest[T]): Try[T] = {
implicit val formats: DefaultFormats.type = DefaultFormats
Try {
parse(jsonString).extract[T]
}
}
关于scala - 使用案例类No Manifest的Scala Dynamic Parse Json可用于T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55991088/
我是一名优秀的程序员,十分优秀!