用JSON循环

时间:2012-10-07 13:29:07

标签: java json

下午好,

我有一个servlet,我想转换一个Json列表。

我使用以下代码

List<Reunion> lista_reuniones = facadeReunion.getServidoresTareas();

        JSONArray mJSONArray = JSONArray.fromObject(lista_reuniones);
lista_reunion中的

我存储Reunion

类型的对象

当我运行代码时出现以下错误:

  

SEVERE:Servlet.service()para servletreunionServletlanzóexterpción   net.sf.json.JSONException:层次结构中有一个循环!       at net.sf.json.util.CycleDetectionStrategy $ StrictCycleDetectionStrategy.handleRepeatedReferenceAsObject(CycleDetectionStrategy.java:97)       at net.sf.json.JSONObject._fromBean(JSONObject.java:857)       at net.sf.json.JSONObject.fromObject(JSONObject.java:192)       at net.sf.json.JSONObject._processValue(JSONObject.java:2774)       at net.sf.json.JSONObject._setInternal(JSONObject.java:2798)       at net.sf.json.JSONObject.setValue(JSONObject.java:1507)       at net.sf.json.JSONObject._fromBean(JSONObject.java:940)       at net.sf.json.JSONObject.fromObject(JSONObject.java:192)       at net.sf.json.JSONArray._processValue(JSONArray.java:2557)       at net.sf.json.JSONArray.processValue(JSONArray.java:2588)       在net.sf.json.JSONArray.addValue(JSONArray.java:2575)       at net.sf.json.JSONArray._fromCollection(JSONArray.java:1082)       at net.sf.json.JSONArray.fromObject(JSONArray.java:145)       at net.sf.json.JSONObject._processValue(JSONObject.java:2749)       at net.sf.json.JSONObject._setInternal(JSONObject.java:2798)       at net.sf.json.JSONObject.setValue(JSONObject.java:1507)       at net.sf.json.JSONObject._fromBean(JSONObject.java:940)       at net.sf.json.JSONObject.fromObject(JSONObject.java:192)       at net.sf.json.JSONObject._processValue(JSONObject.java:2774)       at net.sf.json.JSONObject._setInternal(JSONObject.java:2798)       at net.sf.json.JSONObject.setValue(JSONObject.java:1507)       at net.sf.json.JSONObject._fromBean(JSONObject.java:940)       at net.sf.json.JSONObject.fromObject(JSONObject.java:192)       at net.sf.json.JSONObject._processValue(JSONObject.java:2774)       at net.sf.json.JSONObject._setInternal(JSONObject.java:2798)       at net.sf.json.JSONObject.setValue(JSONObject.java:1507)       at net.sf.json.JSONObject._fromBean(JSONObject.java:940)       at net.sf.json.JSONObject.fromObject(JSONObject.java:192)       at net.sf.json.JSONObject._processValue(JSONObject.java:2774)       at net.sf.json.JSONObject._setInternal(JSONObject.java:2798)       at net.sf.json.JSONObject.setValue(JSONObject.java:1507)       at net.sf.json.JSONObject._fromBean(JSONObject.java:940)       at net.sf.json.JSONObject.fromObject(JSONObject.java:192)       at net.sf.json.JSONArray._processValue(JSONArray.java:2557)       at net.sf.json.JSONArray.processValue(JSONArray.java:2588)       在net.sf.json.JSONArray.addValue(JSONArray.java:2575)       at net.sf.json.JSONArray._fromCollection(JSONArray.java:1082)       at net.sf.json.JSONArray.fromObject(JSONArray.java:145)       at net.sf.json.JSONArray.fromObject(JSONArray.java:127)       在servlet.ReunionServlet.doPost(ReunionServlet.java:176)       在javax.servlet.http.HttpServlet.service(HttpServlet.java:641)       在javax.servlet.http.HttpServlet.service(HttpServlet.java:722)       在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)       在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)       在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)       在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)       在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)       在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)       at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)       在org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)       在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)       在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)       在org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)       在org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:188)       在org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:166)       at org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:302)       at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)       at java.util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source)       在java.lang.Thread.run(未知来源)

你知道问题出在哪里吗?如果有任何帮助,数据库图如下:

enter image description here

THX

2 个答案:

答案 0 :(得分:4)

团结到团聚就是一对多的关系。如果它是双向关系,它可以形成一个循环引用,这可能导致这种类型的异常。

使用Jackson序列化我的bean时遇到了同样的问题。正如我当时在我的项目中使用Hibernate一样。

使用Jackson序列化和使用@JsonManagedReference和@JsonBackReference注释可以避免此问题。

答案 1 :(得分:0)

在我的情况下出现问题是因为我的实体中的某些属性是Lazy(JPA)。

要解决这个问题,我在这个指令中包含了一个jsonConfig:

JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(new String[]{"files", "createdBy", "lastUpdatedBy"});
jsonConfig.setIgnoreDefaultExcludes(false);
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);

JSONObject jsonObject = JSONObject.fromObject(obj, config);

这对我很有用。 ; - )