nul*_*ull 15 json scala playframework playframework-2.0
例如,我在Scala中有这个Map值:
val m = Map(
"name" -> "john doe",
"age" -> 18,
"hasChild" -> true,
"childs" -> List(
Map("name" -> "dorothy", "age" -> 5, "hasChild" -> false),
Map("name" -> "bill", "age" -> 8, "hasChild" -> false)
)
)
Run Code Online (Sandbox Code Playgroud)
我想将其转换为其JSON字符串表示形式:
{
"name": "john doe",
"age": 18,
"hasChild": true,
"childs": [
{
"name": "dorothy",
"age": 5,
"hasChild": false
},
{
"name": "bill",
"age": 8,
"hasChild": false
}
]
}
Run Code Online (Sandbox Code Playgroud)
我目前正在使用Play framework v2.3,但该解决方案不需要使用Play JSON库,但如果有人可以同时提供Play和非Play解决方案,那将会很好.
这是我到目前为止没有成功的事情:
// using jackson library
val mapper = new ObjectMapper()
val res = mapper.writeValueAsString(m)
println(res)
Run Code Online (Sandbox Code Playgroud)
结果:
{"empty":false,"traversableAgain":true}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我得到那个结果.
moh*_*hit 22
作为一种非游戏解决方案,您可以考虑使用json4s,它提供了一个围绕jackson的包装器,并且易于使用.如果您使用的是json4s,那么只需使用以下命令即可将map转换为json:
write(m)
//> res0: String = {"name":"john doe","age":18,"hasChild":true,"childs":[{"name":"dorothy","age":5,"hasChild":false},{"name":"bill","age":8,"hasChild":false}]}
Run Code Online (Sandbox Code Playgroud)
- 更新以包含完整示例 -
import org.json4s._
import org.json4s.native.Serialization._
import org.json4s.native.Serialization
implicit val formats = Serialization.formats(NoTypeHints)
val m = Map(
"name" -> "john doe",
"age" -> 18,
"hasChild" -> true,
"childs" -> List(
Map("name" -> "dorothy", "age" -> 5, "hasChild" -> false),
Map("name" -> "bill", "age" -> 8, "hasChild" -> false)))
write(m)
Run Code Online (Sandbox Code Playgroud)
输出:
res0: String = {"name":"john doe","age":18,"hasChild":true,"childs":[{"name"
:"dorothy","age":5,"hasChild":false},{"name":"bill","age":8,"hasChild":false }]}
Run Code Online (Sandbox Code Playgroud)
替代方式:
import org.json4s.native.Json
import org.json4s.DefaultFormats
Json(DefaultFormats).write(m)
Run Code Online (Sandbox Code Playgroud)
小智 5
val mapper = new ObjectMapper()
mapper.writeValueAsString(Map("a" -> 1))
Run Code Online (Sandbox Code Playgroud)
结果> {“空”:false,“ traversableAgain”:true}
=============================
import com.fasterxml.jackson.module.scala.DefaultScalaModule
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
mapper.writeValueAsString(Map("a" -> 1))
Run Code Online (Sandbox Code Playgroud)
结果> {“ a”:1}
val mymap = array.map {
case 1 => ("A", 1)
case 2 => ("B", 2)
case 3 => ("C", 3)
}
.toMap
Run Code Online (Sandbox Code Playgroud)
使用scala.util.parsing.json.JSONObject
,您只需要 1 行:
import scala.util.parsing.json.JSONObject
JSONObject(mymap).toString()
Run Code Online (Sandbox Code Playgroud)