当缺少必填字段时,是否可以使 json4s 不抛出异常?
当我从原始 json 字符串中“提取”对象时,它会抛出这样的异常
org.json4s.package$MappingException: No usable value for pager
No usable value for rpp
Did not find value which can be converted into byte
at org.json4s.reflect.package$.fail(package.scala:98)
at org.json4s.Extraction$ClassInstanceBuilder.org$json4s$Extraction$ClassInstanceBuilder$$buildCtorArg(Extraction.scala:388)
at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$11.apply(Extraction.scala:396)
是否可以让它为 null ?
最佳答案
很简单,你得用Option
及其潜力,Some
和 None
.
val json = ("name" -> "joe") ~ ("age" -> Some(35));
val json = ("name" -> "joe") ~ ("age" -> (None: Option[Int]))
但请注意,在上述情况下,
match
将为您的 Option
执行.如果是 None
,它将从字符串中完全删除,因此它不会反馈 null。在相同的模式中,要解析不完整的 JSON,您可以使用
case class
与 Option
.case class someModel(
age: Option[Int],
name: Option[String]
);
val json = ("name" -> "joe") ~ ("age" -> None);
parse(json).extract[someModel];
有一种方法不会抛出任何异常,那就是
extractOpt
parse(json).extractOpt[someModel];
使用 Scala API 复制它的一种方法是使用
scala.util.Try
:Try { parse(json).extract[someModel] }.toOption
关于scala - 当缺少必填字段时,是否可以使 json4s 不抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15943957/