在Scala中将数组和映射序列化为json

时间:2013-11-27 13:09:50

标签: scala scala-collections scalatra

我正在尝试从数组构造json字符串。我可以使用JsonAST获取json字符串格式,如下所示:

import net.liftweb.json.JsonAST
import net.liftweb.json.JsonDSL._
import net.liftweb.json.Printer._

val map = Map("a" -> "b", "c" -> "d")
val c = compact(JsonAST.render(map)) 
println(c) //op : {"a":"b","c":"d"}

当我尝试对数组做同样的事情时,它会抛出以下错误:必需:net.liftweb.json.JsonAST.JValue

我正在寻找序列化数组,如val a = Array(1,2,3)

获取支持所有数据结构的json响应的常用方法是什么?

2 个答案:

答案 0 :(得分:4)

我使用json4s(碰巧在引擎盖下使用lift-json):

import org.json4s.native.Serialization.write
import org.json4s.DefaultFormats

val a = Array(1,2,3,4,5)

implicit val formats = DefaultFormats
println(write(a))  // [1,2,3,4,5]

它还可以序列化更复杂的值:

case class Test(map: Map[String, Int], arr: Array[Int])
val t = Test(Map("one" -> 1, "two" -> 2), Array(1, 2, 3, 4, 5))
println(write(t))  // {"map":{"one":1,"two":2},"arr":[1,2,3,4,5]}

答案 1 :(得分:2)

你只需要将数组转换为List,看起来好像liftweb AST没有为原始数组类型定义隐式转换......所以像这样:

scala> val array = Array(1,2,3,4,5)
scala>  val c = compact(JsonAST.render(array.toList))

(注意添加“toList”)工作正常。

希望这有帮助。