2013-11-24 11 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を美しくすることには何か利点はありますか?デバッグ用のものであれば、JSONView for Firefoxのようなブラウザプラグインを使用してフォーマットすることができます。美しい送信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文字列を印刷することはできますが、scalaについてはわかりません。しかし、ここであなたがスカラ座に変換し、それを使用することができますJavaの例である:

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

これは私を助けません。私は、HTTPレスポンスを返すよ以来、私は遊びのJSONオブジェクトを使用する必要がある、とプレイフレームワークは、私は私の自己を定義したくない迷惑な物事のすべての並べ替えの世話をするでしょう。 'content-type'ヘッダーのように '...そして、私は文字列としてかなりjsonを直接得ることができます。外部ツールは不要です。しかし、再び、文字列は私にあまり役に立たないだろう。 –

関連する問題