Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用lift json,是否有一种提取和遍历列表的简单方法?_Json_List_Scala_Lift - Fatal编程技术网

使用lift json,是否有一种提取和遍历列表的简单方法?

使用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"

我想我可能遗漏了json xpath体系结构列表中的一些基本内容。我能够提取和遍历列表的最平滑的方法如下所示。谁能给我演示一种更好的技术:

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