Рендеринг JSON из проанализированного JSON с использованием lift-json в Scala - PullRequest
1 голос
/ 05 января 2012

Это, вероятно, легко, и моя трудность, вероятно, вызвана моей новизной в Scala (которая уже быстро становится моим любимым языком).

В основном у меня есть JSON, который выглядит так:

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

}

Теперь я проанализировал этот 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]
}

Я пытался сделать render (m) и другие полуслучайные вещи, чтобы попытаться заставить его работать, но пока без кубиков. Самое близкое, что я пришел, дает мне эту ошибку:

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

Может ли кто-нибудь, пожалуйста, указать мне в правильном направлении?

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 05 января 2012

Я думаю, что самый простой способ справиться с этим - создать класс case для пакета.Затем Lift-JSON может красиво извлечь данные в экземпляры.Затем вы можете просто просмотреть их и неявно превратить их в объекты JObject, создав 2-кортежи.

1 голос
/ 06 января 2012

если сообщения могут быть любыми данными, вы можете извлечь их как JValues.

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

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