我正在尝试将任何包含Any的Map [String,Any]转换为Map [String,Any]等等,转换为Json String格式。
我找到了这个外部库http://json4s.org/,但令我惊讶的是,Scala核心不包含用于实现此目的的本机库。
有什么想法吗?
问候。
答案 0 :(得分:1)
有很多库可以帮助您实现这一目标。
我目前使用Argonaut来表示Scala项目中的所有JSON,除非我使用Play,在这种情况下它还提供了非常好的JSON支持。看看Argonaut,你可以很容易地实现你想要的东西。
答案 1 :(得分:1)
据我所知,我认为您正在使用Json的自定义实现:Map[String, Any]
所以这里是函数的自定义实现,它将返回地图的String
def show(json: Map[String, Any]) : String = {
def parse(elem: (String, Any)): String = elem match {
case (a: String, b: Map[String, _]) => "\"" + a + "\"" + ":" + show(b) + ""
case (a: String, b: Boolean) => "\"" + a + "\"" + ":" + b.toString
case (a: String, b: Int) => "\"" + a + "\"" + ":" + b.toString
case (a: String, b: Double) => "\"" + a + "\"" + ":" + b.toString
case (a: String, b: String) => "\"" + a + "\"" + ":\"" + b + "\""
}
val assocs = json.map {
case(key, value) => parse((key,value))
}
"{\n" + assocs.mkString(", \n")+ "}"
}
这样的地图:
val mapJson = Map("root" ->
Map("field1" -> 1,
"field2" -> Map("field1" -> true,
"field2" -> 2.03),
"field3" -> "Test"))
它会打印出来:
String = {
"root":{
"field1":1,
"field2":{
"field1":true,
"field2":2.03},
"field3":"Test"}}
答案 2 :(得分:0)
Scala没有内置功能,但是它具有惊人的sintax ...在这里,共有8条惯用语:
def toJson(query: Any): String = query match {
case m: Map[String, Any] => s"{${m.map(toJson(_)).mkString(",")}}"
case t: (String, Any) => s""""${t._1}":${toJson(t._2)}"""
case ss: Seq[Any] => s"""[${ss.map(toJson(_)).mkString(",")}]"""
case s: String => s""""$s""""
case null => "null"
case _ => query.toString
}