在Play2和Scala中使用JSON数组

Com*_*der 15 arrays json scala playframework playframework-2.0

{
  "people": [
    {
      "name": "Jack",
      "age": 15
    },
    {
      "name": "Tony",
      "age": 23
    },
    {
      "name": "Mike",
      "age": 19
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

这是我试图解析的json样本.我希望能够对每个人进行foreach操作并打印出他们的姓名和年龄.

我知道如何在单个项目或特定编号项目时处理json数组.我不知道如何遍历所有项目.

谁能帮我吗?

Jul*_*ont 25

使用Play JSON库有很多方法可以做到这一点.主要区别在于Scala案例类的使用与否.

给出一个简单的json

val json = Json.parse("""{"people": [ {"name":"Jack", "age": 19}, {"name": "Tony", "age": 26} ] }""")
Run Code Online (Sandbox Code Playgroud)

您可以使用案例类和Json宏自动解析数据

import play.api.libs.json._

case class People(name: String, age: Int)

implicit val peopleReader = Json.reads[People]
val peoples = (json \ "people").as[List[People]]
peoples.foreach(println)
Run Code Online (Sandbox Code Playgroud)

或者没有案例类,手动

import play.api.libs.json._
import play.api.libs.functional.syntax._

implicit val personReader: Reads[(String, Int)] = (
  (__ \ "name").read[String] and 
  (__ \ "age").read[Int]
).tupled
val peoples = (json \ "people").as[List[(String, Int)]]
peoples.foreach(println)
Run Code Online (Sandbox Code Playgroud)

换句话说,查看关于这个主题的非常完整的文档:) http://www.playframework.com/documentation/2.1.0/ScalaJson

  • `.as [T]`不安全.使用`.asOpt [T]`或`.validate [T]` (4认同)