反序列化选项 returns None 而不是 json4s 中的异常
Deserializing Option returns None instead of an exception in json4s
当 运行 以下代码时,我希望出现异常,但我得到的是 None
。这是预期的吗?
import org.json4s.jackson.JsonMethods
import org.json4s.{DefaultFormats, Formats}
implicit val f: Formats = DefaultFormats
val json ="{ \"a\" : { \"c\": 1 }}"
case class Foo(a: Option[String])
val foo = JsonMethods.parse(json).extract[Foo]
println(foo)
> Foo(None)
还有那个代码:
import org.json4s.jackson.JsonMethods
import org.json4s.{DefaultFormats, Formats}
implicit val f: Formats = DefaultFormats
val json ="{ \"a\" : { \"c\": 1 }}"
case class Foo(a: String = "")
val foo = JsonMethods.parse(json).extract[Foo]
println(foo)
> Foo()
您可以通过更改默认格式强制执行严格选项解析:
implicit val f: Formats = DefaultFormats.withStrictOptionParsing
底层异常:
[error] (run-main-2) org.json4s.package$MappingException: No usable value for a
[error] Do not know how to convert JObject(List((c,JInt(1)))) into class java.lang.String
当 运行 以下代码时,我希望出现异常,但我得到的是 None
。这是预期的吗?
import org.json4s.jackson.JsonMethods
import org.json4s.{DefaultFormats, Formats}
implicit val f: Formats = DefaultFormats
val json ="{ \"a\" : { \"c\": 1 }}"
case class Foo(a: Option[String])
val foo = JsonMethods.parse(json).extract[Foo]
println(foo)
> Foo(None)
还有那个代码:
import org.json4s.jackson.JsonMethods
import org.json4s.{DefaultFormats, Formats}
implicit val f: Formats = DefaultFormats
val json ="{ \"a\" : { \"c\": 1 }}"
case class Foo(a: String = "")
val foo = JsonMethods.parse(json).extract[Foo]
println(foo)
> Foo()
您可以通过更改默认格式强制执行严格选项解析:
implicit val f: Formats = DefaultFormats.withStrictOptionParsing
底层异常:
[error] (run-main-2) org.json4s.package$MappingException: No usable value for a
[error] Do not know how to convert JObject(List((c,JInt(1)))) into class java.lang.String