加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 当需要的字段丢失时,是否可以使json4s不抛出异常?

发布时间:2020-12-16 09:13:04 所属栏目:安全 来源:网络整理
导读:当需要的字段丢失时,是否可以使json4s不抛出异常? 当我从raw json字符串“提
当需要的字段丢失时,是否可以使json4s不抛出异常?

当我从raw 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)

有可能只是让它为空吗?

解决方法

这很简单,你必须使用选项及其潜力,有些和无.

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读