我有一个通用JSON,其中所有键和值都是字符串。
示例1:
[
{
"key1": "value1"
},
{
"key1": "value2"
}
]
但JSON也可以是:例如2:
[
{
"key1": "value1",
"key2": "value2"
},
{
"key1": "value3",
"key2": "value4"
}
]
我想将JSON转换为映射。示例1将转换为Map[字符串,字符串]
示例2将转换为列表[映射[字符串,字符串]]
因此,基本上我想将JSON转换为Map,并按如下方式使用它:
地图(“键1”)(“键2”)(“键3”)
获取最终结果值3。
请帮忙!!
使用play-json
您可以使用验证
将Json转换为Map。验证返回JsResult
,它可以是Js成功(数据、路径)
或JsError(错误)
。模式匹配以从中获取地图。
检查str是否属于案例1,如果不是回退到案例2
Json.parse(jsonString).validate[Map[String, String]].getOrElse(json.validate[List[Map[String,String]]])
案例1:对于Map[字符串,字符串]
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:对于列表[映射[字符串,字符串]]
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项目,那么将依赖项添加到您的项目中。
建筑sbt公司
libraryDependencies ++= Seq("com.typesafe.play" %% "play-json" % "2.5.4")
Scala复制
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)
问题内容: 我正在使用Scala 2.8中的JSON类中的构建来解析JSON代码。由于最小化依赖性,我不想使用Liftweb或其他任何一种。 我这样做的方法似乎势在必行,是否有更好的方法可以做到? 问题答案: 这是一个基于提取器的解决方案,它将进行类转换: 在for循环的开始,我人为地将结果包装在一个列表中,以便在最后生成一个列表。然后在for循环的其余部分中,我将使用生成器(使用)和值定义(使用
假设我需要解析一个JSON(见下文)。 首先,我解析“status”字段,以获得的实例(见下文) 我可以用解析JSON以获得而不首先获得吗?
本文向大家介绍Scala解析Json字符串的实例详解,包括了Scala解析Json字符串的实例详解的使用技巧和注意事项,需要的朋友参考一下 Scala解析Json字符串的实例详解 1. 添加相应依赖 Json解析工具使用的 json-smart,曾经对比过Java的fastjson、gson。Scala的json4s、lift-json。其中 json-smart 解析速度是最快的。
Scala JSON 是 Scala 用来操作和解析 JSON 数据的工具包。
问题内容: 但是我无法从中得到答案。上面链接的答案: 它运作良好,但我想对泛型使用隐式运算符。见下文: 然后,我尝试将Class参数传递给方法: 然后出现一个错误: 谁能告诉我为什么会出现此错误?TypeToken类不支持隐式运算符吗? 问题答案: 您可以这样:
问题内容: 在Java中,我可以这样做: … 当然假设()。 使用 Scala 时, Scala 的模拟与此类似吗? (当然)不会编译-但是如何以这样的方式声明变量? 编辑 ; 我要补充一点。这种差异显然与以下事实有关:在Java中,泛型 在T 中 从不协变 ,而在Scala中,它们可以是协变的,也可以不是。例如,Scala类在T中是协变的(并且必然是不变的)。因此, 将编译 以下内容: 我还在为