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多个异常堆栈跟踪条目。