我是scala的新手,仍然需要学习很多东西。但暂时我有这个json对象:
driverCarJSON = """{
"collection": {
"listing": [
],
"cars": ["bmw", "ford", "vw"]
,
"carDriverMap" :[{"car1":"driver1"},
{"car2":"driver2"},
{"car3":"driver3"},
{"car4":"driver4"},
{"car5":"driver5"}]
}
}"""
我正在尝试访问carDriverMap中键的值。 所以,如果我想要" car2"的价值它应该返回" driver2"
现在,我正在使用这个解析这个json:
scala.util.parsing.json.JSON.parseFull(driverCarJSON)
返回
Some(Map(collection -> Map(listing -> List(), cars -> List(bmw, ford, vw), carDriverMap -> List(Map(car1 -> driver1), Map(car2 -> driver2), Map(car3 -> driver3), Map(car4 -> driver4), Map(car5 -> driver5)))))
我被困在这里该怎么办?
我已经使用函数
看到了这个解决方案def getValue(parsedJson : Option[Any] , key:String): String ={
parsedJson match {
case Some(m : Map[String,Any]) => m(key) match {
case d:String => d
}
}
}
然后调用它getValue(driverCarJSON , carDriverMap["collection"][2]["car2"])
但是当我打印它时,没有任何东西被打印出来。
谢谢
答案 0 :(得分:1)
这适用于2.11和单独的解析器 - 组合器依赖:
val driverCarJSON = """{
"collection": {
"listing": [
],
"cars": ["bmw", "ford", "vw"]
,
"carDriverMap" :[{"car1":"driver1"},
{"car2":"driver2"},
{"car3":"driver3"},
{"car4":"driver4"},
{"car5":"driver5"}]
}
}"""
val parsedJson = scala.util.parsing.json.JSON.parseFull(driverCarJSON).get
val d2 = parsedJson
.asInstanceOf[Map[String, Any]]
.apply("collection")
.asInstanceOf[Map[String, Any]]
.apply("carDriverMap")
.asInstanceOf[List[Map[String, String]]]
.apply(1)("car2")
println(d2) // output: driver2
但我个人觉得这个API并没有经过深思熟虑。我找不到任何方法来避免所有丑陋和不必要的asInstanceOf
。这已经在很久以前被弃用了,所以请考虑使用像json4s
这样的新版本,它不会受到重复asInstanceOf
的影响。