scala - 当缺少必填字段时,是否可以使 json4s 不抛出异常?

标签 scala json4s

当缺少必填字段时,是否可以使 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及其潜力,SomeNone .

val json = ("name" -> "joe") ~ ("age" -> Some(35));
val json = ("name" -> "joe") ~ ("age" -> (None: Option[Int]))

但请注意,在上述情况下,match将为您的 Option 执行.如果是 None ,它将从字符串中完全删除,因此它不会反馈 null。

在相同的模式中,要解析不完整的 JSON,您可以使用 case classOption .
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/

相关文章:

Scala 部分应用不清楚

java - Scala 中的类、对象、特征、密封特征

sbt - 如何从任务中的文件读取数据并使用它来设置另一个设置?

json - 使用 Scala 和 json4s 反序列化为 java 对象

json4s org.json4s.package$映射异常 : Do not know how to convert JString into double

mysql - EBean 映射 bool 值默认为 false 而不是 null

scala - 累加器未显示在 Spark UI 中

scala - 为什么 Array 需要 ClassManifest 而不是 List?

json - 如何在 Spark 2 Scala 中将 Row 转换为 json

JSON4S 类型提示不起作用