提升JSON JValue Extract问题

时间:2014-11-21 06:47:25

标签: scala lift lift-json json4s

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

提取不起作用。

有人能告诉我该怎么做才能做到这一点

1 个答案:

答案 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的强大功能来自它的类型系统,所以最好使用它而不是通过字符串输入来丢失它。