在Play 2.0中,如果没有显式名称,如何在JSON树中获取元素?

在Play 2.0中,如果没有显式名称,如何在JSON树中获取元素?,json,scala,playframework,playframework-2.0,Json,Scala,Playframework,Playframework 2.0,我一直在分析Play2.0项目中的.json文件,但有一件事我搞不清楚。以下是在线文档中的一个片段: { "users":[ { "name": "Bob", "age": 31.0, "email": "bob@gmail.com" }, { "name": "Kiki", "age": 25.0, "email": null } ] } 我想知道的是,我如何抓住一个完整的用户?

我一直在分析Play2.0项目中的.json文件,但有一件事我搞不清楚。以下是在线文档中的一个片段:

{
  "users":[
    {
      "name": "Bob",
      "age": 31.0,
      "email": "bob@gmail.com"
    },
    {
      "name": "Kiki",
      "age":  25.0,
      "email": null
    }
  ]
}
我想知道的是,我如何抓住一个完整的用户?问题是我不知道如何引用代表单个用户的参数分组。我试过类似的方法

( json \\ "users" ) 
它只是将所有用户作为列表中的一个元素,我尝试了以下方法

( json \ "users" \ (user)(0)) 
但似乎我必须定义“用户”,我不知道什么才是合适的

更好的是,有没有办法抓住列表中的所有客户?或者只是在树上迭代并点击每个用户,这样我就可以一次访问特定用户的所有信息?

Jerkson-JSON(游戏中使用的JSON库!)支持这种方式:

(json \ "users")(0)
如果要进行迭代,可以将其强制转换为JArray(并可能检查类型),然后调用
elements
方法:

(json \ "users").asInstanceOf[JArray].elements foreach {
    ...
}

可能没有更好的方法了:

如果您已经知道JSON包含一个对象列表,您可以使用
作为[list[JsObject]]
请求将该元素提取为一个

例如:

val str = """{
  "users":[
    {
      "name": "Bob",
      "age": 31.0,
      "email": "bob@gmail.com"
    },
    {
      "name": "Kiki",
      "age":  25.0,
      "email": null
    }
  ]
}"""

val json = Json.parse(str)
val users = (json \ "users").as[List[JsObject]]
users.foreach { user =>
  println("user: " + user)
}
生成:

user: {"name":"Bob","age":31.0,"email":"bob@gmail.com"}
user: {"name":"Kiki","age":25.0,"email":null}

这些列表元素中的每一个都支持与原始JSON对象相同的运算符,因此您可以使用
(user\“name”)提取单个值。例如[String]
,等等。

您使用的播放版本是什么?你打算去2.1吗?我用的是2.0。这个问题与我正在从事的一个2.0项目有关,所以我不打算迁移到2.1。但是如果我不知道用户的数量呢?有没有一种好方法可以在不知道它们有多少的情况下遍历它们?