使用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