有没有办法设置toJson()的递归深度



这似乎是在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)

最新更新