我想使用upickle library的ujson从json文档中提取一个可选字符串。在某些文档中,json字段存在,而在其他文档中则不存在。
当访问该字段且该字段不存在时,我会得到一个NoSuchElementException:
val json = ujson.read(jsonString)
json("attributename").str
results in: java.util.NoSuchElementException: key not found: attributename在ujson中处理可选json属性的惯用方法是什么?
发布于 2019-03-08 19:43:24
如果您想在发生任何异常时返回默认值,您可以结合使用Try和getOrElse
val result = Try(json("attributename").str).getOrElse("defaultValue")如果没有这样的键,则结果将是attributename键或defaultValue字符串的值。
发布于 2019-03-08 20:25:17
我认为最常用的方法是创建一个case类,而不是手动使用JSON AST。
在你的case类中,你可以有一个Option[String]字段。
case class MyModel( attributeName: Option[String] )
implicit val rw: ReadWriter[MyModel] = macroRW
read[MyModel](jsonString)但从外观上看,你可以做
json.obj.value.get("attributename").map(_.str)去拿回一个Option[String]。
发布于 2020-05-06 01:23:42
别忘了,json是一个对象。
所以我们可以像这样检查:
val json = ujson.read(jsonString)
if (json.obj.get("attributename").nonEmpty) {
json("attributename").str
...
}顺便说一句,你可以像这样得到keySet:
json.obj.keySethttps://stackoverflow.com/questions/55061072
复制相似问题