Groovy-将对象转换为JSON字符串


74

我已经习惯了Grails转换器,您可以在其中将任何对象转换为JSON表示形式,就像这样(http://grails.org/Converters+Reference

return foo as JSON

但是在普通的习惯中,我找不到一种简单的方法来做到这一点(http://groovy-lang.org/json.html

JSONObject.fromObject(this)

返回空的json字符串...

我是否缺少明显的Groovy转换器?或者我应该去杰克逊图书馆还是吉森图书馆?


1
纯Java库(例如,在Java反射/ Java Bean上运行的库)不了解本地“常规属性”
Jacek Cz

Answers:


147

您的意思是:

import groovy.json.*

class Me {
    String name
}

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

println new JsonBuilder( o ).toPrettyString()

1
这确实是有效的。但疯狂的事情是,如果您指定“ public String name”。如果您使用公共访问器,JsonBuilder似乎会忽略它们……
Wavyx 2014年

@Wavyx是的,那么它没有进入metaClass.properties,所以没有被构建者接手:-/
tim_yates 2014年

好吧..只有其他丑陋的解决方案是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 << props String json = JsonOutput.toJson(outObject) prettyPrint ? JsonOutput.prettyPrint(json) : json }
Wavyx 2014年

也许:new JsonBuilder( this.getClass().declaredFields.findAll { !it.synthetic }.collectEntries { [ (it.name):this[ it.name ] ] } ).toString()
tim_yates 2014年

23

我无法在Intellij的评估控制台中使用其他答案,所以...

groovy.json.JsonOutput.toJson(myObject)

效果很好,但不幸的是

groovy.json.JsonOutput.prettyString(myObject)

没有为我工作。

为了使它漂亮印刷,我必须这样做...

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

9

您可以为此使用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()

7
请考虑提供完整的答案,因为它比链接到其他站点更有用。此链接不再起作用。
antonyh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.