[英]Generic Json Parsing in Scala
我有一个通用的JSON,其中所有键和值都是字符串。
例1:
[
{
"key1": "value1"
},
{
"key1": "value2"
}
]
但JSON也可以是:Example2:
[
{
"key1": "value1",
"key2": "value2"
},
{
"key1": "value3",
"key2": "value4"
}
]
我想将JSON转换为Map。 示例1将转换为Map [String,String]
示例2将转换为List [Map [String,String]]
所以基本上我想将JSON转换为Map并按以下方式使用它:
地图( “KEY1”)( “KEY2”)( “KEY3”)
得到最终结果值3。
请帮忙!!
使用play-json
您可以使用validate
将Json转换为Map。 验证返回JsResult
,它可以是JsSuccess(data,path)
或JsError(errors)
。 模式匹配可从中获取地图。
检查str是否属于情况1,如果不退回到情况2
Json.parse(jsonString).validate[Map[String, String]].getOrElse(json.validate[List[Map[String,String]]])
情况1:对于Map [String,String]
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
是您想要转换为Map的json字符串
如果您正在使用sbt project
则将play-json
依赖项添加到您的项目中。
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.