Как ответить с помощью хорошо напечатанного объекта JSON, используя игровую среду?

Как можно отправить, используя Play! Framework, ответ JSON, который отформатирован, чтобы быть читаемым человеком?

Например, я ищу что-то вроде:

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)
  }
}

Мой поиск привел меня к JSON pretty-print, который сам по себе не очень помог, но он сказал, что возможность должна быть интегрирована в будущие версии. Это была игра 2.1.X, так что, я думаю, она уже существует где-то в версии игры 2.2X?

Ответ 1

Play Framework имеет встроенную поддержку печати:

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

Итак, в вашем случае было бы достаточно сделать следующее:

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)
  }
}

Ответ 2

Вы можете использовать Gson для печати строки Json, не знаете о scala; но вот пример Java, который вы можете преобразовать в scala и использовать его:

Gson gson = new GsonBuilder().setPrettyPrinting().create();
String jsonStr = gson.toJson(obj);
System.out.println(jsonStr);