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]]

そして、その理由を理解するのを助けるために: foldLeft2 つの引数を取ります。初期状態、および「現在の」状態と次の入力を受け取り、「次の」状態を返す関数。「入力」は、呼び出しfoldLeftているものの要素、つまりList("a", "b", "c").

したがってjson、初期状態として を使用すると、最初の状態変更呼び出しは になりますjson \ "a"。次はその計算の結果、バックスラッシュ「b」などになります。

于 2013-03-15T11:37:03.860 に答える