Search code examples
scalaplay-json

read elements from json array in playframework scala


Given a json:

val json = """
{
  "persons": [
    {"name": "Foo", "age": 21},    
    {"name": "Bar", "age": 22},
    {"name": "Baz", "age": 23}
  ]
}
"""

How to construct a play Reads[List[String]] which will extract list of names form that json?

import play.api.libs.json._

val reads: Reads[List[String]] = ???

val names: List[String] = reads.reads(Json.parse(json)) 
// expecting List("Foo", "Bar", "Baz")


Solution

  • Just compose with Reads.

    import play.api.libs.json._
    
    val input = Json.parse("""
    {
      "persons": [
        {"name": "Foo", "age": 21},    
        {"name": "Bar", "age": 22},
        {"name": "Baz", "age": 23}
      ]
    }
    """)
    
    val nameReads = (JsPath \ "name").read[String]
    val listReads: Reads[Seq[String]] = Reads.seq(nameReads)
    
    (input \ "persons").validate(listReads)
    // JsSuccess(Vector(Foo, Bar, Baz),)