例如,我在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)
)
)
字符串
我想把它转换成JSON字符串表示:
{
"name": "john doe",
"age": 18,
"hasChild": true,
"childs": [
{
"name": "dorothy",
"age": 5,
"hasChild": false
},
{
"name": "bill",
"age": 8,
"hasChild": false
}
]
}
型
我目前正在开发Play框架v2.3,但解决方案不需要使用Play JSON库,尽管如果有人能提供Play和非Play解决方案就好了。
这是我迄今为止所做的,没有成功:
// using jackson library
val mapper = new ObjectMapper()
val res = mapper.writeValueAsString(m)
println(res)
型
测试结果:
{"empty":false,"traversableAgain":true}
型
我不明白为什么我得到了这个结果。
8条答案
按热度按时间w6lpcovy1#
作为一个非播放解决方案,你可以考虑使用json4s,它提供了一个围绕Jackson的 Package 器,并且易于使用。如果你使用的是json 4s,那么你可以使用以下命令将map转换为json:
字符串
--更新以包含完整示例--
型
输出量:
型
替代方式:
型
rhfm7lfc2#
字符串
结果>
{"empty":false,"traversableAgain":true}
型
结果>
{"a":1}
gudnpqoy3#
你需要告诉Jackson如何处理Scala对象:第一个月
zpf6vheq4#
字符串
使用
scala.util.parsing.json.JSONObject
,只需要一行:型
3xiyfsfu5#
如果您正在使用定义良好的数据模型,为什么不定义case类并使用PlayJSON宏来处理转换呢?即
字符串
toiithl66#
使用Jackson库可以做的一件事是使用java HashMap对象,而不是Scala对象。然后,您基本上可以使用您已经编写的相同的“不成功”代码。
字符串
退货
型
8fsztsew7#
如果有人正在寻找使用标准库的解决方案。
字符串
8iwquhpp8#
下面的代码片段摘自scala官方网站,对我来说效果很好。它使用uPickle库。
字符串
https://docs.scala-lang.org/toolkit/json-serialize.html