使用play-json
可使用validate
將Json轉換爲地圖。驗證返回JsResult
可能是JsSuccess(data,path)
或JsError(errors)
。模式匹配從中獲取地圖。
檢查str是殼體1的如果不是回退到殼體2
Json.parse(jsonString).validate[Map[String, String]].getOrElse(json.validate[List[Map[String,String]]])
情況1:在地圖[字符串,字符串]
import play.api.libs.json._
val result = Json.parse(someValidJsonString).validate[Map[String, String]]
result match {
case JsSuccess(map, _) => map
case JsError(errors) => Logger.error("json parsing failed")
}
情況2:對於列表[Map [String,String]]
import play.api.libs.json._
val result = Json.parse(someValidJsonString).validate[List[Map[String, String]]]
result match {
case JsSuccess(list, _) => list
case JsError(errors) => Logger.error("json parsing failed")
}
這裏someValidJsonString
是你想如果你正在使用sbt project
再加入play-json
依賴於你的項目轉換爲地圖
JSON字符串。 https://jsonformatter.curiousconcept.com:
build.sbt
libraryDependencies ++= Seq("com.typesafe.play" %% "play-json" % "2.5.4")
斯卡拉REPL
scala> import play.api.libs.json._
import play.api.libs.json._
scala> val map = Map("java" -> 1, "scala" -> 2)
map: scala.collection.immutable.Map[String,Int] = Map(java -> 1, scala -> 2)
scala> Json.toJson(map).validate[Map[String, Int]]
res3: play.api.libs.json.JsResult[Map[String,Int]] = JsSuccess(Map(java -> 1, scala -> 2),)
scala> val result = Json.toJson(map).validate[Map[String, Int]]
result: play.api.libs.json.JsResult[Map[String,Int]] = JsSuccess(Map(java -> 1, scala -> 2),)
scala> result match { case JsSuccess(data, _) => data case JsError(errors) => Unit}
res4: Object = Map(java -> 1, scala -> 2)
沒有這些例子是有效JSONs(你可以在這裏看到自己/) –
'map(「key1」)(「key2」)(「key3」)'returns'value3' ???那個怎麼樣? 'key3'從哪裏來? – dk14
其通用的'json'。你只能有一個鍵或n鍵。我想將'json'轉換爲嵌套地圖並想獲得地圖(k1)(k2)..(kn) – satendra