2013-11-24 1 views
9

재생 프레임 워크를 사용하여 어떻게 아름답게 json 응답을 보낼 수 있습니까? 나는 쿼리 매개 변수 pretty을 갖고 싶습니다. 제공 될 때 json 응답은 이 될 것입니다.입니다. 재생 프레임 워크를 사용하여 예쁜 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 버전의 어딘가에 이미 존재합니다.

+0

JSON을 아름답게 만드는 데 어떤 이점이 있습니까? 디버깅 용이라면 Firefox 용 JSONView와 같은 브라우저 플러그인을 사용하여이를 포맷 할 수 있습니다. 미적으로 JSON을 보내면 대역폭이 낭비된다. –

+0

기본 비헤이비어는 축소 된 JSON입니다. 'pretty' 플래그를 쿼리 매개 변수로 제공 할 때만 아름답게 처리됩니다. 은혜? 그것은 읽을 수 있습니다. 때때로 당신은 당신의 데이터를 인간이 읽을 수있는 형식으로 표현하기를 원할 것입니다. 예를 들어 [elasticsearch] (http://www.elasticsearch.com)를 살펴보십시오. 그들은 단지 그렇게합니다. 예쁜 플래그를 제공하면 노드/클러스터에서 모든 종류의 데이터를 볼 수 있습니다. 이것은 아주 유용합니다. –

답변

16

플레이 프레임 워크는 꽤 인쇄 지원을 내장했습니다

은 경우에 따라서
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) 
    } 
} 
+0

은 Json 응답이'JsObject' 대신에'String'을 사용하더라도 가지고 있어야하는 모든 것을 처리 할 것인가? –

+1

아마 그렇지는 않지만 "모든 것"은 실제로 콘텐츠 형식 일뿐입니다. 내 답변을 편집하여 다른 콘텐츠 유형을 시행하는 데 필요한 것을 보여주었습니다. – Leo

+0

위대한! 감사 :) –

-2

Gson을 사용하여 Json 문자열을 인쇄하거나 스칼라에 대해 알 수 없습니다. 그러나 여기 당신이 스칼라로 변환하고이를 사용할 수있는 자바의 예는 다음과 같습니다

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

이것이 도움이되지 않습니다. http 응답을 반환하기 때문에, 나는 play의 json 객체를 사용할 필요가 있습니다. play 프레임 워크는 모든 종류의 성가신 것들을 처리 할 것입니다. 나는 자기 자신을 정의하고 싶지 않습니다. 'content-type' 헤더 등 '... 그리고 BTW, 나는 꽤 json 문자열을 직접 얻을 수 있습니다. 외부 도구가 필요 없습니다. 하지만 다시 문자열이 나를 잘하지 못한다. \ –

관련 문제