1

これはおそらく簡単なことで、私の難しさはおそらく Scala を初めて知ったことが原因であると思われます (Scala は私のお気に入りの言語になりつつあります)。

基本的に、次のような JSON があります。

{
"to"      : "Peter",
"from"    : "Dave",
"bundle"  : [
             {"data": [1,2,3,4,5]},
             {"data": [2,3,4,5,6]}
            ]

}

これで、この JSON を解析して、ヘッダーからデータを取得し (to および from)、バンドル内の個々のメッセージを確認できるようになりました。現時点では、これを使用しています:

val messages = parsedJSON \\ "bundle" \\ classOf[JObject]

for (m <- messages) println(m)

それは私に与えます:

Map(data -> List(1, 2, 3, 4, 5))
Map(data -> List(2, 3, 4, 5, 6))

しかし、そのループでやりたいことは、各マップを取得して JSON に戻すことです。

{
"data": [1,2,3,4,5]
}

render(m) やその他のさまざまな半ランダムなものを試して動作させようとしましたが、これまでのところサイコロはありません。私が来た最も近いものは私にこのエラーを与えます:

No implicit view available from Any => net.liftweb.json.package.JValue.

誰でも私を正しい方向に向けることができますか?

前もって感謝します!

4

2 に答える 2

3

これを処理する最も簡単な方法は、バンドルのケースクラスを作成することだと思います。その後、Lift-jsonはデータをインスタンスにうまく抽出できます。次に、それらをループして、2タプルを作成することにより、暗黙的にJObjectに戻すことができます。

case class Bundle(data: List[BigInt])

val bundles = (parsedJSON \\ "bundle").extract[List[Bundle]]
// List(Bundle(List(1, 2, 3, 4, 5)), Bundle(List(2, 3, 4, 5, 6)))
bundles
  .map{ bundle => ("data" -> bundle.data)}
  .foreach{ j => println(compact(render(j)))}
//{"data":[1,2,3,4,5]}
//{"data":[2,3,4,5,6]}
于 2012-01-05T05:41:06.480 に答える
1

メッセージが任意のデータである場合、それらを JValues として抽出できます。

import net.liftweb.json._
import net.liftweb.json.JsonDSL._

val parsedJSON = parse(...)
val bundles = (parsedJSON \\ "bundle").extract[List[JValue]]
compact(render(bundles))
于 2012-01-06T06:50:42.497 に答える