2014-01-08 169 views
49

我敢用Grails的轉換器,在那裏你可以將任何對象轉換爲JSON表示,就像這樣(http://grails.org/Converters+ReferenceGroovy的 - 轉換對象JSON字符串

return foo as JSON 

但在普通常規,我無法找到一個簡單的方法來做到這一點(http://groovy-lang.org/json.html

JSONObject.fromObject(this) 

返回空字符串JSON ...

我缺少一個明顯的Groovy轉換器? 或者我應該去傑克遜或gson庫?

+0

本地的「常規性」不知道純Java庫(即在Java反射/ Java bean的工作庫) –

回答

92

你的意思是這樣的:

import groovy.json.* 

class Me { 
    String name 
} 

def o = new Me(name: 'tim') 

println new JsonBuilder(o).toPrettyString() 
+1

這確實是加工。但是,瘋狂的事情是,如果你指定「公共字符串名稱」。如果您使用公共訪問器,JsonBuilder似乎忽略它們... – Wavyx

+0

@Wavyx是的,那麼它不會將它變成'metaClass.properties',所以不會被構建器拾取: -/ –

+0

好吧..其他難看的解決方案是 'def toJsonString(Boolean prettyPrint = false){ Map props = [:] def outObject = Publication.declaredFields.findAll {!it.synthetic && it.name!='props'} .collectEntries {v - > [(v.name):this [v.name]] } outObject <<道具 字符串json = JsonOutput.toJson(outObject) prettyPrint? JsonOutput.prettyPrint(json):json }' – Wavyx

4

您可以使用JsonBuilder了點。

示例代碼:

import groovy.json.JsonBuilder 

class Person { 
    String name 
    String address 
} 

def o = new Person(name: 'John Doe', address: 'Texas') 

println new JsonBuilder(o).toPrettyString() 
+4

請考慮提供一個完整的答案,因爲它比另一個站點的鏈接更有幫助。此鏈接不再有效。 – antonyh

8

我不能讓其他的答案中的IntelliJ這樣評價控制檯內的工作...

groovy.json.JsonOutput.toJson(myObject) 

這工作得很好,但不幸的是

groovy.json.JsonOutput.prettyString(myObject) 

沒有爲我工作。

要得到它漂亮的印刷我不得不這樣做......

groovy.json.JsonOutput.prettyPrint(groovy.json.JsonOutput.toJson(myObject))