2013-11-24 18 views
9

cách người ta có thể gửi, sử dụng khung chơi, phản ứng json được làm đẹp? tôi muốn có thông số truy vấn pretty, khi được cung cấp, phản hồi json sẽ là được in đẹp.làm thế nào để trả lời một json đẹp bằng cách sử dụng khung chơi?

xem xét một số mẫu mã:

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

bao sự kỳ diệu có thể được thực hiện? tìm kiếm của tôi đã dẫn tôi đến số json pretty print không hữu ích cho chính nó, nhưng nó cho rằng sự cần thiết phải được tích hợp trong các phiên bản sau. và nó đã được chơi 2.1.X đã được nói về - vì vậy, tôi đoán nó đã tồn tại ở đâu đó trong phiên bản 2.2X của vở kịch.

+0

Có lợi ích nào để có JSON đẹp đẽ không? Nếu nó chỉ để gỡ lỗi, bạn có thể sử dụng một plugin trình duyệt như JSONView cho Firefox để định dạng nó. Gửi JSON đẹp đẽ chỉ lãng phí băng thông. –

+0

hành vi mặc định là JSON được rút gọn. chỉ khi cung cấp cờ 'pretty' làm tham số truy vấn, bạn sẽ nhận được kết quả được làm đẹp. lợi ích? nó có thể đọc được. và đôi khi bạn sẽ muốn thấy một biểu diễn có thể đọc được của con người về dữ liệu của bạn. hãy xem [elasticsearch] (http://www.elasticsearch.com) chẳng hạn. họ làm điều đó. bằng cách cung cấp một lá cờ đẹp, bạn có thể thấy tất cả các loại dữ liệu trên nút/cụm của bạn. điều này khá hữu ích. –

Trả lời

16

khuôn khổ Chơi đã hỗ trợ in ấn khá built-in:

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

Vì vậy, trong trường hợp của bạn, nó sẽ là đủ để làm như sau:

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

sẽ chơi chăm sóc của tất cả mọi thứ một phản ứng json nên có ngay cả khi tôi sử dụng một 'String' thay vì' JsObject'? –

+1

Có lẽ không, nhưng "mọi thứ" thực sự chỉ là kiểu nội dung. Tôi đã chỉnh sửa câu trả lời của mình để hiển thị những gì cần thiết để thực thi các loại nội dung khác, nó không phải là vấn đề lớn. – Leo

+0

tuyệt vời! cảm ơn :) –

-2

Bạn có thể sử dụng Gson để in chuỗi Json đẹp, không biết về scala; nhưng đây là một ví dụ Java mà bạn có thể chuyển đổi sang scala và sử dụng nó:

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

điều này sẽ không giúp tôi. kể từ khi tôi trả về một câu trả lời http, tôi cần phải sử dụng đối tượng json của play, và khung chơi sẽ xử lý tất cả những thứ phiền toái mà tôi không muốn tự định nghĩa. giống như tiêu đề 'content-type', etc '... và BTW, tôi có thể lấy trực tiếp chuỗi json. không cần cho các công cụ bên ngoài. nhưng một lần nữa, chuỗi sẽ không làm cho tôi nhiều tốt: \ –

Các vấn đề liên quan