/ / Representación de JSON de JSON analizado utilizando lift-json en Scala - análisis, scala, render, lift-json

Representación de JSON a partir de JSON analizado utilizando lift-json en Scala - análisis, scala, render, lift-json

Probablemente este sea fácil y mi dificultad probablemente se deba a mi novedad en Scala (que ya se está convirtiendo rápidamente en mi idioma favorito).

Básicamente tengo un JSON que se parece a esto:

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

}

Ahora, he analizado este JSON hasta el punto en el que puedo extraer los datos del encabezado (hacia y desde) y puedo revisar los mensajes individuales en el paquete. En este momento estoy usando esto:

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

for (m <- messages) println(m)

Lo que me da:

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

Pero lo que quiero hacer en ese bucle es tomar cada mapa y convertirlo de nuevo a JSON, es decir:

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

He intentado render (m) y varias otras cosas semi-aleatorias para intentar que funcione, pero hasta ahora no tengo dados. Lo más cerca que he llegado me da este error:

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

¿Alguien puede hacerme el favor de indicarme la dirección correcta?

¡Gracias por adelantado!

Respuestas

3 para la respuesta № 1

Creo que la forma más fácil de manejar esto escrear una clase de caso para un paquete. Lift-json puede extraer los datos en instancias. Luego, puede recorrerlos y convertirlos en JObjects implícitamente creando 2-tuplas.

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 para la respuesta № 2

Si los mensajes pueden ser datos, puede extraerlos como JValues.

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

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