从argonaut
docs获得以下内容:
import argonaut._
import Argonaut._
case class Person(name: String, age: Int)
implicit def PersonDecodeJson: DecodeJson[Person] =
jdecode2L(Person.apply)("name", "age")
scala> Json.obj("name" -> jString("bob"),
"age" -> jString("whoops - not a number.")
).as[Person]
res1: argonaut.DecodeResult[Person] = DecodeResult(Left((Int,CursorHistory(List(El(CursorOpDownField(age),true))))))
scala> Json.obj("name" -> jNumber(42),
"age" -> jString("whoops - not a number.")
).as[Person]
res2: argonaut.DecodeResult[Person] = DecodeResult(Left((String,CursorHistory(List(El(CursorOpDownField(name),true))))))
在res2
中,似乎age
的类型不正确,即预期的数字,但得到字符串,没有显示在游标输出中。换句话说,在我看来,name
上的解码失败很快。
是否有“开箱即用”DecodeJson
会返回所有失败的解码尝试?