質問に誤りがあります:
これは私が持っているものです:
実際には、単一JObject
の ではなく、次のコレクションがありJObject
ます。
val jObject = (
("foo" ->
("bar" -> 5) ~
("bar2" -> 5)) ~
("something" -> "else")
)
val collection: JValue = List(jObject)
のコレクションはjson 配列に変換されます (またはJObject
である可能性があるため)。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"
// }