/ / Преобразуване на JSON от анализирания JSON, използващ асансьор в Scala - анализ, скала, ренде, асансьор

Представяне на JSON от анализирания JSON, използващ асансьор в Scala - анализиране, скала, ренде, асансьор

Вероятно това е лесно и моята трудност вероятно е причинена от новостта ми към Скала (която вече бързо се превръща в любимия ми език).

По принцип имам JSON, който изглежда така:

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

}

Сега, аз съм parsed този JSON до точката, където мога да издърпам данните от заглавието (до и от) и да гледам на отделните съобщения в пакета.В момента аз съм използвайки това:

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]
}

Опитах да направя ренд (м) и различни други полу-случайни неща, за да се опитам да го накарам да работи, но досега няма зарове. Най-близкото, което дойдох, ми дава тази грешка:

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

Може ли някой да ме насочи в правилната посока?

Благодаря предварително!

Отговори:

3 за отговор № 1

Мисля, че най-лесният начин да се справите с това есъздайте класа на кутия за пакет. Lift-json може да извлече добре данните в отделни случаи. След това можете просто да ги пренавиете и да ги превърнете обратно в JObjects, като имплицитно създавате 2-тила.

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]}

1 за отговор № 2

ако съобщенията могат да бъдат всякакви данни, можете да ги извлечете като JValues.

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

val parsedJSON = parse(...)
val bundles = (parsedJSON \ "bundle").extract[List[JValue]]
compact(render(bundles))