sjson
sjson copied to clipboard
scala.MatchError when expecting a tuple but only null is given
"net.debasishg" % "sjson_2.9.2" % "0.19"
scalaVersion := "2.9.3"
test code:
package test
case class QueryJson(
time_from: Int,
time_to: (Int, Int)
)
object Main {
import sjson.json._
import DefaultProtocol._
import dispatch.classic.json.JsonParser
import scala.util.parsing.input.CharSequenceReader
implicit val QueryJsonFormat: Format[QueryJson] = asProduct2("time_from", "time_to")(QueryJson)(QueryJson.unapply(_).get)
def main(args: Array[String]) {
val q = QueryJson(0, (0, 1))
println(JsonSerialization.tojson(q))
val js = JsonSerialization.fromjson[QueryJson](JsonParser(new CharSequenceReader("{\"time_from\":0,\"time_to\":null}")))
println(js.time_from)
println(js.time_to)
}
}
sbt run result:
scala.MatchError: null (of class dispatch.classic.json.JsNull$)
at sjson.json.BasicTypes$$anon$3.reads(StandardTypes.scala:27)
at sjson.json.BasicTypes$$anon$3.reads(StandardTypes.scala:23)
at sjson.json.JsonSerialization$.fromjson(JsonSerialization.scala:9)
at sjson.json.Generic$$anon$4.reads(Generic.scala:64)
at sjson.json.JsonSerialization$.fromjson(JsonSerialization.scala:9)
at test.Main$.main(Main.scala:21)
at test.Main.main(Main.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
I think thowing a RuntimeException
will be better, like what List and Seq do.