像动态提取模式一样提升JSON LINQ

时间:2013-03-15 06:06:03

标签: scala lift scala-2.10 scala-2.9 lift-json

我尝试使用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来实现这种模式?

1 个答案:

答案 0 :(得分:1)

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

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

并帮助理解原因: foldLeft有两个论点;初始状态,以及采用“当前”状态和下一个输入的函数,返回“下一个”状态。 “输入”是您正在调用foldLeft的内容的元素,即List("a", "b", "c")

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