【发布时间】:2019-07-17 17:05:49
【问题描述】:
我有一组字符串并将其用作键值以从 Map 中获取 JValues:
val keys: Set[String] = Set("Metric_1", "Metric_2", "Metric_3", "Metric_4")
val logData: Map[String, JValue] = Map("Metric_1" -> JInt(0), "Metric_2" -> JInt(1), "Metric_3" -> null)
在下面的方法中,我正在解析每个指标的值。首先获取所有值,然后过滤以去除空值,然后将现有值转换为布尔值。
val metricsMap: Map[String, Boolean] = keys
.map(k => k -> logData(k).extractOpt[Int]).toMap
.filter(_._2.isDefined)
.collect {
case (str, Some(0)) => str -> false
case (str, Some(1)) => str -> true
}
当keys 之一在logData 地图中找不到时,我遇到了问题。所以我收到了java.util.NoSuchElementException: key not found: Metric_4。
这里我使用extractOpt 从 JSON 中提取值,不需要默认值。所以extractOrElse 可能不会有帮助,因为我只需要获取现有键的值并跳过不存在的键。
当logData 映射中不存在密钥时,处理这种情况的正确方法是什么?
UPD:我已经达到了.map(k => k -> apiData.getOrElse(k, null).extractOpt[Int]).toMap 所期望的结果。但是仍然不确定这是最好的方法。
【问题讨论】:
标签: json scala collections