2014-11-21 101 views
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))) 

我处理的混合类型的情况,并试图将合资转换列表[字符串]使用电梯JSON JValue提取问题

jV.extract[List[String]] 

提取不工作。

有人能告诉我,我应该怎么去这样做

回答

3

电梯JSON没有字符串和在串行器定义JBools之间的转换。

数组中的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的力量来自它的类型系统,所以最好使用它,而不是通过在这里输入字符串来丢失它。