这就是我所拥有的:
(("foo" ->
("bar" -> 5) ~
("bar2" -> 5)) ~
("something" -> "else"))
这就是我得到的:
[
{
"foo": {
"bar": 5,
"bar2": "5"
},
"something": "else",
}
]
但这就是我想回来的地方:
{
"foo": {
"bar": 5,
"bar2": "5"
},
"something": "else",
}
我在这里做错了什么?
细节
def getAll: JValue = db withSession { implicit db: Session =>
// getUsersQuery fetchs all users
getUsersQuery.list.map { u =>
("foo" ->
("bar" -> 5) ~
("bar2" -> 5)) ~
("something" -> "else")
}
}
答案 0 :(得分:1)
您的问题中有错误:
这就是我所拥有的:
实际上你没有一个JObject
,而是一个JObject
的集合:
val jObject = (
("foo" ->
("bar" -> 5) ~
("bar2" -> 5)) ~
("something" -> "else")
)
val collection: JValue = List(jObject)
JObject
的集合将转换为json数组(因为它可以是List()
或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"
// }