我尝试使用Lift JSON执行基于XPath的提取,除了在运行时确定提取的xpath模式
为了说明,我想使用(json \“a”\“b”\“c”)将字符串“a.b.c.d”转换为Lift JSON提取。extract [List [Int]]
import net.liftweb.json._
import net.liftweb.json.JsonDSL._
import net.liftweb.json.JsonAST._
import net.liftweb.json.Extraction._
implicit val formats = net.liftweb.json.DefaultFormats
val x = """{ "a" : { "b" : [ {"c" : 10},{ "c" : 20 } ] } }"""
val json = parse(x)
val dataString = "a.b.c"
val dataList = dataString.split("\\.").toList
// List(a,b,c)
//我想将上面的字符串转换为 - (json \“a”\“b”\“c”)。extract [List [Int]]
是否可以使用foldLeft来实现这种模式?
答案 0 :(得分:1)
如果我理解你的问题,这就是你想要的:
List("a", "b", "c").foldLeft(json){ _ \ _ }.extract[List[Int]]
并帮助理解原因:
foldLeft
有两个论点;初始状态,以及采用“当前”状态和下一个输入的函数,返回“下一个”状态。 “输入”是您正在调用foldLeft
的内容的元素,即List("a", "b", "c")
。
因此,如果您使用json
作为初始状态,则第一次状态更改调用将为json \ "a"
。接下来将是该计算的结果,反斜杠“b”,依此类推。