簡體   English   中英

在Scala的地圖中獲取鍵的值

[英]getting the value of a key in a map in Scala

我是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"])但是當我打印時,什么也沒打印。

謝謝

這適用於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 s的方法。 很久以前不推薦使用此方法,因此請考慮使用諸如json4s較新json4s ,它不會受到重復的asInstanceOf s的影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM