使用lift json,是否有一种提取和遍历列表的简单方法?
我想我可能遗漏了json xpath体系结构列表中的一些基本内容。我能够提取和遍历列表的最平滑的方法如下所示。谁能给我演示一种更好的技术:使用lift json,是否有一种提取和遍历列表的简单方法?,json,list,scala,lift,Json,List,Scala,Lift,我想我可能遗漏了json xpath体系结构列表中的一些基本内容。我能够提取和遍历列表的最平滑的方法如下所示。谁能给我演示一种更好的技术: class Example { @Test def traverseJsonArray() { def myOperation(kid:JObject) = println("kid="+kid) val json = JsonParser.parse(""" { "kids"
class Example {
@Test
def traverseJsonArray() {
def myOperation(kid:JObject) = println("kid="+kid)
val json = JsonParser.parse("""
{ "kids":[
{"name":"bob","age":3},
{"name":"angie","age":5},
]}
""")
val list = ( json \\ "kids" ).children(0).children
for ( kid <- list ) myOperation(kid.asInstanceOf[JObject])
}
}
类示例{
@试验
def traversej声纳射线(){
def myOperation(kid:JObject)=println(“kid=“+kid”)
val json=JsonParser.parse(“”)
{“孩子”:[
{“姓名”:“鲍勃”,“年龄”:3},
{“姓名”:“安吉”,“年龄”:5},
]}
""")
val list=(json\\“childs”).children(0.children)
对于(kid如果可能的话,您应该升级到Lift JSON 2.3-M1(http://www.scala-tools.org/repo-releases/net/liftweb/lift-json_2.8.1/2.3-M1/)。它包含两个重要的改进,另一个影响路径表达式
在2.3中,路径表达式从不返回JFields,而是直接返回JFields的值。之后,您的示例如下所示:
val list = (json \ "kids").children
for ( kid <- list ) myOperation(kid.asInstanceOf[JObject])
val list=(json\“childs”).children
对于(kid),这是列表提取的一个改进,谢谢。现在我需要在没有显式类型转换的情况下神奇地应用该操作…嗨,你能给我解释一下JArray(kids)
// Collect all JObjects from 'kids' array and iterate
val JArray(kids) = json \ "kids"
kids collect { case kid: JObject => kid } foreach myOperation
// Yield the JObjects from 'kids' array and iterate over yielded list
(for (kid@JObject(_) <- json \ "kids") yield kid) foreach myOperation
// Extract the values of 'kids' array as JObjects
implicit val formats = DefaultFormats
(json \ "kids").extract[List[JObject]] foreach myOperation
// Extract the values of 'kids' array as case classes
case class Kid(name: String, age: Int)
(json \ "kids").extract[List[Kid]] foreach println
// Query the JSON with a query comprehension
val ks = for {
JArray(kids) <- json
kid@JObject(_) <- kids
} yield kid
ks foreach myOperation