在下面的代码中,encoded
是一个JSON字符串。 JSON.parseFull()
函数返回以下形式的对象:Some(Map(...))
。我正在使用.get
来提取Map
,但由于编译器将其视为类型Any
,因此无法对其进行索引。有没有提供编译器可见性,事实上,它是一个地图?
val parsed = JSON.parseFull(encoded)
val mapped = parsed.get
答案 0 :(得分:1)
您可以使用collect
模式匹配来匹配类型:
scala> val parsed: Option[Any] = Some(Map("1" -> List("1")))
parsed: Option[Any] = Some(Map(1 -> List(1)))
scala> val mapped = parsed.collect{
case map: Map[String, Any] => map
}
mapped: Option[Map[String,Any]] = Some(Map(1 -> List(1)))
在List
值的情况下,您可以执行以下操作,以获取List
中的值:
scala> mapped.get.map{ case(k, List(item1)) => item1}
res0: scala.collection.immutable.Iterable[Any] = List(1)
答案 1 :(得分:1)
我能够使用get
函数和模式匹配的组合,类似于Tanjin的响应中发布的,以获得所需的结果。
object ReadFHIR {
def fatal(msg: String) = throw new Exception(msg)
def main (args: Array[String]): Unit = {
val fc = new FhirContext()
val client = fc.newRestfulGenericClient("http://test.fhir.org/r2")
val bundle = client.search().forResource("Observation")
.prettyPrint()
.execute()
val jsonParser = fc.newJsonParser()
val encoded = jsonParser.encodeBundleToString(bundle)
val parsed = JSON.parseFull(encoded)
val mapped: Map[String, Any] = parsed.get match{
case map: Map[String, Any] => map
}
println(mapped("resourceType"))
}
}