【问题标题】:Lift JSON LINQ Like Dynamic Extraction Pattern提升 JSON LINQ 类动态提取模式
【发布时间】:2013-03-03 18:44:28
【问题描述】:

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

为了说明,我想使用 (json \ "a" \ "b" \ "c").extract[List[Int]] 将字符串 "a.b.c.d" 转换为 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 来实现这种模式?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多