"people": [
{
"name": "Jack",
"age": 15
},
{
"name": "Tony",
"age": 23
},
{
"name": "Mike",
"age": 19
}
]
Thats a sample of the json i'm trying to parse through. I want to be able to do a foreach operation on each person and println their name and age.
I know how to handle json arrays when it's a single item or a specific numbered item. I don't know how to iterate through all items.
Can anyone help me out?
There are many ways to do this with the Play JSON Library. The main difference is the usage of Scala case class or not.
Given a simple json
val json = Json.parse("""{"people": [ {"name":"Jack", "age": 19}, {"name": "Tony", "age": 26} ] }""")
You can use case class and Json Macro to automatically parse the data
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)
Or without case class, manually
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)
In other words, check the very complete documentation on this subject :)
http://www.playframework.com/documentation/2.1.0/ScalaJson
If you don't have the object type you can use .as[List[JsValue]]
val jsValue = Json.parse(text)
val jsSubCategories = (jsValue \ "people").as[List[JsValue]]
Then access each element like usual
for (jsSubCategory <- jsSubCategories) {
println((jsSubCategory \ "name").as[String])
}