How to respond with a pretty-printed JSON object using play framework?

gilad hoch picture gilad hoch · Nov 24, 2013 · Viewed 7.6k times · Source

How can one send, using the Play! framework, a JSON response that is formatted to be human-readable?

For example, I'm looking for something like:

def handleGET(path:String) = Action{ implicit request =>
  val json = doSomethingThatReturnsAJson(path,request)
  request.getQueryString("pretty") match {
    case Some(_) => //some magic that will beautify the response
    case None => Ok(json)
  }
}

My search led me to JSON pretty-print, which was not very helpful on it's own, but it did say the ability should be integrated in future versions. That was play 2.1.X, so, I guess it already exists somewhere in the 2.2X version of play?

Answer

Leo picture Leo · Nov 24, 2013

Play framework has pretty printing support built-in:

import play.api.libs.json.Json
Json.prettyPrint(aJsValue)

So in your case, it would be sufficient to do the following:

def handleGET(path:String) = Action { implicit request =>
  val json = doSomethingThatReturnsAJson(path, request)
  request.getQueryString("pretty") match {
    case Some(_) => Ok(Json.prettyPrint(json)).as(ContentTypes.JSON)
    case None => Ok(json)
  }
}