You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Map[String, Any]的WrappedArray嵌套Map中提取non_unique对应值?

解决Scala中从Map[String, Any]提取指定metric值的问题

步骤1:将Any类型转换为具体集合类型

你通过metrics.get("metrics").get拿到的metricToInvestigate是Any类型,需要先转换为明确的集合类型(这里是Seq[Map[String, Any]],因为WrappedArray是Scala标准库中Seq的实现类):

// 安全获取并转换类型,提前处理key不存在或类型不匹配的情况
val metricsArray = metrics.get("metrics") match {
  case Some(arr: Seq[_]) => arr.asInstanceOf[Seq[Map[String, Any]]]
  case _ => Seq.empty[Map[String, Any]]
}

步骤2:提取目标metric值

遍历转换后的集合,找到metric_name为non_unique的元素,再取出对应的metric_value:

// 查找并提取non_unique对应的数值,同时处理异常情况
val nonUniqueValue = metricsArray.find { metricMap =>
  metricMap.get("metric_name").contains("non_unique")
}.flatMap(_.get("metric_value")) match {
  case Some(value: Int) => value
  case _ => 0 // 当找不到目标metric或类型不匹配时返回默认值
}

简化版(适合确定数据结构的场景)

如果能确定数据结构不会出错,可以用更简洁的写法:

val nonUniqueValue = metrics("metrics")
  .asInstanceOf[Seq[Map[String, Any]]]
  .find(_("metric_name") == "non_unique")
  .map(_("metric_value").asInstanceOf[Int])
  .getOrElse(0)

内容的提问来源于stack exchange,提问作者Lapchi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:05:30