假设,我已经流case class有object:
case class A(a: String, b: Int)
object A {
def apply(c: String) = new A(c, 100500)
}
Run Code Online (Sandbox Code Playgroud)
我要把 json 转换{"c": "foo"}成 class A。
为此,我创建了协议:
object AJsonProtocol extends DefaultJsonProtocol {
implicit val aFormat = jsonFormat1(A.apply)
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序:
object Main {
import AJsonProtocol._
def main(args: Array[String]): Unit = {
val r = """{"c": "foo"}""".parseJson.convertTo[A]
println(r)
}
}
Run Code Online (Sandbox Code Playgroud)
当我开始可能应用程序时,我得到异常:
Exception in thread "main" java.lang.ExceptionInInitializerError
at Main$.main(Main.scala:21)
at Main.main(Main.scala)
Caused by: scala.MatchError: [Ljava.lang.String;@6328d34a (of class [Ljava.lang.String;)
at spray.json.ProductFormatsInstances$class.jsonFormat1(ProductFormatsInstances.scala:23)
at AJsonProtocol$.jsonFormat1(Main.scala:13)
at AJsonProtocol$.<init>(Main.scala:14)
at AJsonProtocol$.<clinit>(Main.scala)
... 2 more
Run Code Online (Sandbox Code Playgroud)
为什么我会收到这个错误?
如何将 json like 转换"{'c': 'foo'}"为 class A?
你的case类带有apply方法,你在campanion对象中也定义了apply方法,有一种方法可以具体,当你声明jsonFormat时,并说明你想使用哪个apply方法。
object AJsonProtocol extends DefaultJsonProtocol {
implicit val aFormat = jsonFormat[String, A](A.apply, "c")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
350 次 |
| 最近记录: |