groovy - 有没有办法设置 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)
推荐阅读
- java - 带有递归的 Java 调用栈。如何取回最后一个对象?
- python - 如果我的脚本使用从其他文件导入的函数,如何让我的脚本从 Unix 上的可执行 python 文件运行?(ModuleNotFoundError)
- r - 如何用独立数据预测具有平滑项和基本函数的 GAM?
- r - 如何在 R 中对具有给定条件(累积和)的数据进行分组?
- c# - asp.Net Core 一对多关系 UPDATE 语句与 FOREIGN KEY 约束冲突
- ios - 带有 åäö(特殊字符)的 Alamofire GET 请求,无效 url
- fortran - Fortran 初始化
- tensorflow - 自然语言处理 LSTM 神经网络精度太低
- nginx - Nginx 不会重定向到 www
- core-data - 让 NSPersistentCloudKitContainer 在设备之间同步的问题(SwiftUI、iOS)