你的问题有一个错误:
这就是我所拥有的:
实际上你没有一个JObject
,而是一个集合JObject
:
val jObject = (
("foo" ->
("bar" -> 5) ~
("bar2" -> 5)) ~
("something" -> "else")
)
val collection: JValue = List(jObject)
并且 collection ofJObject
将被转换为 json 数组(因为它可能是List()
or List(jObject, jObject)
)。
如果你想得到一个值,你必须以某种方式从集合中提取这个值:
// note type inference here, it will be Seq[JObject] or similar
def getAll = db withSession { implicit db: Session =>
// getUsersQuery fetchs all users
getUsersQuery.list.map { u =>
("foo" ->
("bar" -> 5) ~
("bar2" -> 5)) ~
("something" -> "else")
}
}
for {
j <- getAll.headOption
} println(pretty(render(j)))
对于单个值(如您最初的问题),它工作得很好:
import org.json4s.JsonDSL._
import org.json4s.jackson.JsonMethods._
// or
// import org.json4s.native.JsonMethods._
val source = (
("foo" ->
("bar" -> 5) ~
("bar2" -> 5)) ~
("something" -> "else")
)
pretty(render(source))
// String =
// {
// "foo" : {
// "bar" : 5,
// "bar2" : 5
// },
// "something" : "else"
// }
更新(回复评论):
def getAll: JValue = (1 to 2).toList map { u =>
("bar" -> 5) ~
("bar2" -> 5)
}
val result = (
("foos" -> getAll) ~
("something" -> "else")
)
pretty(render(result))
// String =
// {
// "foos":[{
// "bar":5,
// "bar2":5
// },{
// "bar":5,
// "bar2":5
// }],
// "something":"else"
// }