2011-08-24 31 views
8

JSON được đề cập đang được đọc từ một dịch vụ RESTful, và tôi muốn in nó ra (để bàn điều khiển, mặc dù trong .gsp cũng sẽ là tốt) cho các mục đích gỡ lỗi. Groovy 1.3.7 (hiện tại vào tháng 8 năm 2011) sử dụng Groovy 1.7.8 (mà không có JsonOutput được giới thiệu trong 1.8)Có thể in JSON đẹp trong Grails 1.3.7 không?

Lưu ý Tôi hiện đang đọc nó như thế này, mà tôi không tin là 'grooviest hoặc grail-est 'cách để làm điều đó - có lẽ tôi có thể tận dụng lợi thế của các trình biến đổi và in đẹp nếu được thực hiện khác nhau? Mẫu mã sẽ được đánh giá cao.

def serviceURL = new URL(theURL) 
    def json = new JSONObject(serviceURL.text) 
    println json 

Trả lời

14

Bạn có thể in khá JSON với phương thức toString(int indentFactor). Ví dụ:

def json = new JSONObject() 
json.put('foo', 'bar') 
json.put('blat', 'greep') 
println json 
===>{"foo":"bar","blat","greep"} 
println json.toString(4) 
===>{ 
    "foo": "bar", 
    "blat": "greep" 
} 
+0

Wow, cảm ơn, đơn giản. – Peter

5

Bạn có thể sử dụng grails.converters.JSON (đó là thư viện thông dụng nhất cho JSON):

Trong file config.groovy của bạn, hãy thêm dòng thiết prettyprint true:

grails.converters.default.pretty.print=true 

Sau đó, trong điều khiển của bạn:

import grails.converters.* 

def serviceURL = new URL(theURL) 
def json = JSON.parse(serviceURL.text) 
println "JSON RESPONSE: ${json.toString()" 
3

Nếu bạn đang ở trong một bộ điều khiển Grails và có kế hoạch để làm cho json, sau đó bạn sử dụng một cái gì đó như thế này (sử dụng Grails 2.3.5):

public prettyJson() { 
    JSON json = ['status': 'OK'] as JSON 
    json.prettyPrint = true 
    json.render response 
} 

tôi thấy rằng giải pháp ở đây: http://www.intelligrape.com/blog/2012/07/16/rendering-json-with-formatting/

0

Ngoài thiết lập mặc định khá in trong Config.groovy, toString JSON() của phương pháp chấp nhận một tham số boolean. Nó kiểm soát cho dù khá in kết quả hay không.

import grails.converters.* 
import my.data.* 

def accountJson = Account.get(1001) as JSON 
println(accountJson.toString(true)) 
println(accountJson.toString(false)) 

Thử nghiệm trong Grails 1.3.9.