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

提取不起作用。

有人能告诉我我该怎么做吗

4

1 回答 1

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 的很多功能都来自于它的类型系统,所以最好使用它而不是在这里通过字符串输入来丢失它。

于 2014-11-21T08:26:28.963 回答