在Play 2.0中,如果没有显式名称,如何在JSON树中获取元素?
我一直在分析Play2.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 } ] } 我想知道的是,我如何抓住一个完整的用户?
{
"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。但是如果我不知道用户的数量呢?有没有一种好方法可以在不知道它们有多少的情况下遍历它们?