JSON은 Hibernate 솔리드 클래스 넷을 처리합니다.sf.json.JSONException: There is a cycle in the hierarchy 예외

2112 단어 DAOjson.netHibernate
Hibernate에서 많은 실체 클래스가 등급을 연결하는 관계, 즉 특정한 클래스이기 때문에 다른 클래스의 인용 대상이 속성을 충당하는 것이 나타났다.그러면 JSON으로 처리하면 끼워넣는 이상이 발생합니다:net.sf.json.JSONException: There is a cycle in the hierarchy 예외.
이 오류를 처리하기 전에 일반적인 JSON 처리 데이터 예시를 보십시오
TProcessInfoDAO dao = new TProcessInfoDAO();
   List<TProcessInfo> orgData = dao.findAll();
   JSONArray array=JSONArray.fromObject(orgData);
   String json=array.toString();
   System.out.println(json);

 
이러한 처리 방식에서 TprocessInfoDAO 클래스의 모든 속성은 일반 속성이어야 하며 인용 대상에 따라 포함되지 않습니다
인용 대상을 포함할 때 일반적으로 인용 속성을 필터링해야 합니다. 그러면 JSON 처리가 통과할 수 있습니다. 이것은 인용 대상을 출력하지 않습니다.
TProcessInfoDAO dao = new TProcessInfoDAO();
   List<TProcessInfo> orgData = dao.findAll();
   JsonConfig config = new JsonConfig();
   config.setJsonPropertyFilter(new PropertyFilter() {
   public boolean apply(Object source, String name, Object value) {
   //            
   if (name.equals("TProcessInfos") || name.equals("TProcessInfo")) {
   return true;
   } else {
   return false;
   }
   }
   });
  
   //  ExtHelper   JSONConfig    
   JSONArray JsonArr=JSONArray.fromObject(orgData, config);
   String jsonstr=JsonArr.toString();

인용 대상을 출력하는 처리 방식도 있다
JSON-LIB의 setcycleDetectionStrategy 속성을 설정하면 순환을 스스로 처리하기 쉬우나 데이터가 너무 복잡하면 데이터가 넘치거나 효율이 떨어진다.
 
TProcessInfoDAO dao = new TProcessInfoDAO();
		 List<TProcessInfo> orgData = dao.findAll();
		JsonConfig config = new JsonConfig();    
		 config.setIgnoreDefaultExcludes(false);       
		 config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
		 //  ExtHelper   JSONConfig    
		 JSONArray JsonArr=JSONArray.fromObject(orgData, config);
		 String jsonstr=JsonArr.toString();
		 System.out.println(jsonstr);

좋은 웹페이지 즐겨찾기