【问题标题】:Lift JSON JValue Extract issue解除 JSON JValue 提取问题
【发布时间】:2014-11-21 06:47:24
【问题描述】:
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]]
提取不起作用。
谁能告诉我该怎么做呢
【问题讨论】:
标签:
scala
lift
lift-json
json4s
【解决方案1】:
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 的强大功能很大程度上来自于它的类型系统,所以最好使用它而不是在这里通过字符串输入来丢失它。