Parsing JSON in Play2 and Scala without Data Type Parsing JSON in Play2 and Scala without Data Type json json

Parsing JSON in Play2 and Scala without Data Type


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]).tupledval 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 or don't want to write a Reads, you can use .as[Array[JsValue]]

val jsValue = Json.parse(text)val list = (jsValue \ "people").as[Array[JsValue]]

Then

list.foreach(a => println((a \ "name").as[String]))

In the older version (2.6.x) it is possible to use .as[List[JsValue]] but newer versions only support Array.