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转换为List [Strings]jV.extract[List[String]]
提取不起作用。
有人能告诉我该怎么做才能做到这一点
答案 0 :(得分:3)
Lift JSON在序列化程序中定义的字符串和JBool之间没有转换。
Array中的List是否总是具有相同的形状?如果是这样,那么你可以这样做:
case class Datum(id: BigInt, comment: String, bool: Boolean)
val data = jv.extract[List[Datum]]
如果这对你不起作用,因为没有统一的形状,但你仍然只想要一个字符串列表,那么你可以在尝试进行提取之前将JBools转换为JStrings:
jv.map({
case JBool(bool) => if (bool) JString("true") else JString("false")
case x => x
}).extract[List[String]]
总的来说,我鼓励您考虑一下为什么要丢弃类型信息。很多Scala的强大功能来自它的类型系统,所以最好使用它而不是通过字符串输入来丢失它。