Java 解析json文件引发stackoverflow异常
我有一个非常复杂的对象,到目前为止,我使用它通过Java 解析json文件引发stackoverflow异常,java,json,Java,Json,我有一个非常复杂的对象,到目前为止,我使用它通过@XmlRootElement将其序列化为xml,并且工作得非常好。现在我正在编写REST,需要将其序列化为json。发生的情况是它抛出StackOverflowError异常。到目前为止,我写的是,原因可能是双向映射,但我认为我的情况并非如此。如果我错过了双向映射,那么原因可能是什么?我该如何跟踪?这个对象非常复杂,很多人支持它很长一段时间,有没有一种简单的方法我可以跟踪它,但我想不出来? 谢谢 编辑 下面是堆栈跟踪: StackOverflow
@XmlRootElement
将其序列化为xml,并且工作得非常好。现在我正在编写REST,需要将其序列化为json。发生的情况是它抛出StackOverflowError
异常。到目前为止,我写的是,原因可能是双向映射,但我认为我的情况并非如此。如果我错过了双向映射,那么原因可能是什么?我该如何跟踪?这个对象非常复杂,很多人支持它很长一段时间,有没有一种简单的方法我可以跟踪它,但我想不出来?
谢谢
编辑
下面是堆栈跟踪:
StackOverflowError
java.util.regex.Pattern.sequence(Pattern.java:1902)
java.util.regex.Pattern.expr(Pattern.java:1769)
java.util.regex.Pattern.compile(Pattern.java:1477)
java.util.regex.Pattern.<init>(Pattern.java:1150)
java.util.regex.Pattern.compile(Pattern.java:840)
net.sf.json.regexp.JdkRegexpMatcher.<init>(JdkRegexpMatcher.java:38)
net.sf.json.regexp.JdkRegexpMatcher.<init>(JdkRegexpMatcher.java:31)
net.sf.json.regexp.RegexpUtils.getMatcher(RegexpUtils.java:39)
net.sf.json.util.JSONTokener.matches(JSONTokener.java:113)
net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:962)
net.sf.json.JSONObject.fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:1006)
net.sf.json.JSONObject.fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:1006)
net.sf.json.JSONObject.fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:1006)
net.sf.json.JSONObject.fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:1006)
net.sf.json.JSONObject.fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:1006)
net.sf.json.JSONObject.fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:1006)
net.sf.json.JSONObject.fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:1006)
net.sf.json.JSONObject.fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:1006)
net.sf.json.JSONObject.fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:1006)
net.sf.json.JSONObject.fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:1006
堆栈溢出错误
sequence(Pattern.java:1902)
expr(Pattern.java:1769)
compile(Pattern.java:1477)
Pattern.(Pattern.java:1150)
compile(Pattern.java:840)
JdkRegexpMatcher.(JdkRegexpMatcher.java:38)
JdkRegexpMatcher.(JdkRegexpMatcher.java:31)
net.sf.json.regexp.RegexpUtils.getMatcher(RegexpUtils.java:39)
net.sf.json.util.JSONTokener.matches(JSONTokener.java:113)
net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:962)
fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject.\u来自JSONtokener(JSONObject.java:1006)
fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject.\u来自JSONtokener(JSONObject.java:1006)
fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject.\u来自JSONtokener(JSONObject.java:1006)
fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject.\u来自JSONtokener(JSONObject.java:1006)
fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject.\u来自JSONtokener(JSONObject.java:1006)
fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject.\u来自JSONtokener(JSONObject.java:1006)
fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject.\u来自JSONtokener(JSONObject.java:1006)
fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject.\u来自JSONtokener(JSONObject.java:1006)
fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject.\u来自JSONtokener(JSONObject.java:1006)
fromObject(JSONObject.java:156)
net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:350)
net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:1006
您最好发布您的对象以及用于对其进行反序列化的代码。此外,您可以尝试使用其他库执行此操作:
Jackson(或多或少的标准库):
GSON:尝试在调试器中捕获SOE并查看堆栈跟踪。您应该能够跟踪到导致它的原因。如果您使用intellij/eclipse,有一些工具可以帮助检测对象模型中的周期性依赖关系。或者使用第三方工具,您可以在Google上搜索。最糟糕的情况是,您可以遍历从基本对象中提取对象层次结构,并自己跟踪它,以查看是否存在循环显示前20多个异常堆栈跟踪条目。