2

我正在尝试使用 Lift JSON 执行基于 XPath 的提取,但提取的 xpath 模式是在运行时确定的

为了说明,我想使用 (json \ "a" \ "b" \ "c").extract[List[Int]] 将字符串“abcd”转换为 Lift JSON 提取

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 来实现这种模式?

4

1 回答 1

1

如果我理解你的问题,这就是你想要的:

List("a", "b", "c").foldLeft(json){ _ \ _ }.extract[List[Int]]

并帮助理解原因: foldLeft需要两个参数;一个初始状态,以及一个接受“当前”状态和下一个输入的函数,返回“下一个”状态。“输入”是您正在调用的事物的元素foldLeft,即List("a", "b", "c").

因此,如果您将json其用作初始状态,则第一个状态更改调用将是json \ "a". 下一个将是该计算的结果,反斜杠“b”,依此类推。

于 2013-03-15T11:37:03.860 回答