Поднимите проблему извлечения JSON JValue

import net.liftweb.json._
import net.liftweb.json.JsonAST._
import net.liftweb.json.Extraction._
import net.liftweb.json.Printer._

implicit val formats = net.liftweb.json.DefaultFormats

val jV = JArray(List(JInt(10),JString("ahem"),JBool(false)))

Я имею дело с ситуацией смешанных типов и пытаюсь преобразовать Jv в список [Strings], используя

jV.extract[List[String]]

Извлечение не работает.

Может кто-нибудь сказать мне, как мне это сделать


person user2780187    schedule 21.11.2014    source источник


Ответы (1)


Lift JSON не имеет преобразования между строками и JBools, определенными в сериализаторах.

Всегда ли список внутри массива имеет одинаковую форму? Если это так, то вы можете сделать что-то вроде:

case class Datum(id: BigInt, comment: String, bool: Boolean)

val data = jv.extract[List[Datum]]

Если это не сработает для вас, так как нет единой формы, но вам все еще нужен список строк, вы можете преобразовать JBools в JString, прежде чем пытаться выполнить извлечение:

jv.map({
  case JBool(bool) => if (bool) JString("true") else JString("false")
  case x => x
}).extract[List[String]]

В целом, я бы посоветовал вам подумать о том, почему вы отбрасываете здесь информацию о типе. Довольно большая мощь Scala проистекает из его системы типов, поэтому лучше использовать ее, чем потерять ее из-за строкового ввода здесь.

person Aaron    schedule 21.11.2014