sjson icon indicating copy to clipboard operation
sjson copied to clipboard

scala.MatchError when expecting a tuple but only null is given

Open henix opened this issue 11 years ago • 1 comments

"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.

henix avatar May 22 '13 09:05 henix