0

これは私が持っているものです:

(("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")

    }
}
4

1 に答える 1

1

質問に誤りがあります:

これは私が持っているものです:

実際には、単一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"
// }
于 2014-02-11T05:26:25.590 に答える