这似乎是在groovy中漂亮打印对象的最简单/最推荐的方法:
println prettyPrint(toJson(myDumbObject))
但在这样做的时候,我经常遇到堆栈溢出,因为当toJson((找到递归结构时,它会出现已知的问题:https://user.groovy.codehaus.narkive.com/07vuiZZB/groovy-user-stackoverflowerror-in-jsonoutput
难道没有办法只告诉toJson((在X级后停止吗?
如果你有groovy 2.5+,你可以自己做toJson
import groovy.json.*
import org.apache.groovy.json.internal.CharBuf
@groovy.transform.CompileStatic
class MyJsonOut extends DefaultJsonGenerator {
private int nestLimit=32
private int nest=0
MyJsonOut(JsonGenerator.Options opts = new JsonGenerator.Options()){
super(opts)
}
@Override
protected void writeObject(String key, Object object, CharBuf buffer) {
nest++
if(nest>nestLimit)object="<TOO-DEEP>"
super.writeObject(key, object, buffer)
nest--
}
String toPrettyJson(Object o){
return JsonOutput.prettyPrint(this.toJson(o))
}
}
class A{
String name
def ref
}
def o=new A(name:"hohoho")
o.ref=o
println new MyJsonOut().toPrettyJson(o)