假设我已up
与case class
流动:
object
我要将case class A(a: String, b: Int)
object A {
def apply(c: String) = new A(c, 100500)
}
之类的json转换为类{"c": "foo"}
。
为此,我创建了协议:
A
我的申请:
object AJsonProtocol extends DefaultJsonProtocol {
implicit val aFormat = jsonFormat1(A.apply)
}
当我开始申请时,我得到例外:
object Main {
import AJsonProtocol._
def main(args: Array[String]): Unit = {
val r = """{"c": "foo"}""".parseJson.convertTo[A]
println(r)
}
}
为什么我会收到此错误?
如何将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
之类的json转换为类"{'c': 'foo'}"
?
答案 0 :(得分:4)
你的case类附带了apply方法,你在campanion对象中定义了apply方法,当你声明jsonFormat时,有特定的方法,并说明你想要使用哪种方法。
object AJsonProtocol extends DefaultJsonProtocol {
implicit val aFormat = jsonFormat[String, A](A.apply, "c")
}