json 해결, There is a cycle in the hierarchy, 하나의 관련 층 으로 만 순환
JSONarray 는 판단 에 따라 얻 은 유형 에 따라 해당 하 는 방법 을 호출 합 니 다.
if (object instanceof Collection) return _fromCollection((Collection)object, jsonConfig);
내 가 hibenate 에 게 서 얻 은 것 은 list 이기 때문에 호출 하 러 갔다from Collection 방법, 안에 있 는 방법 에서 문 제 를 발견 합 니 다. 이 방법 은 실체 속성 을 계속 뜯 어서 없 을 때 까지 합 니 다.
package bijian.model.bean;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
public class User{
private long userID;
private String username;
private String nickname;
private String password;
private Integer sex;
private Integer age;
private String photo;
private Date createTime;
private Integer loginState;
private Integer hotValue;
private Integer attentionNum;
private Integer followingNum;
private Integer sentenceNum;
private Integer visitNum;
private Set attentions=new HashSet();
private Set followings=new HashSet();
private Set friends=new HashSet();
private Set chats=new HashSet();
private Set notices=new HashSet();
private Set messages=new HashSet();
private Set sentences=new HashSet();
private Set receiveComments=new HashSet();
private Set sendComments=new HashSet();
private Set reportSentences=new HashSet();
private Set relatedSentences=new HashSet();
private Set loveSentences=new HashSet();
private Set labelUsers=new HashSet();
private Set subscribeLabels=new HashSet();
......................................
}
package bijian.model.bean.relationbean;
import java.util.Date;
import bijian.model.bean.User;
public class Attention {
private long attentionID;
private User self;
private User attentioner;
private Date createTime;
private Integer isValid;
..........................
}
Attention 클래스 를 볼 수 있 습 니 다. 다 대 일 하면, 만약, 만약...
List
JASONARray. from Object (attentions) 가 잘못 보고 할 수 있 습 니 다. 구체 적 으로 참고 하 세 요.http://blog.csdn.net/jazywoo123/article/details/8681555
그러나 저 는 attention 의 User 속성 을 유지 하고 싶 지만 User 의 다른 속성 을 걸 러 내지 않 습 니 다. 즉,
[{"attentionID":1, "attentioner":{"age":12,"attentionNum":2,"createTime":null,"followingNum":0,"hotValue":34,"loginState":0,.......................................
attentioner 는 User 대상 이지 만 User 대상 의 복잡 한 대상 속성 은 걸 러 냅 니 다.
JASONARray 를 볼 수 있 는 방법 중 JSonConfig 는 Attention 을 걸 러 낸 다음 User 에서 json 으로 넘 어 가 는 방법 입 니 다.
if (object instanceof Collection) return _fromCollection((Collection)object, jsonConfig);
따라서 Attention 을 걸 러 내 는 속성 에 User 속성 을 추가 할 수 있 습 니 다.
private JsonConfig jsonFilterProperty(final List<String> properties){
JsonConfig config=new JsonConfig();
config.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor());
if(properties!=null&&properties.size()>0){
config.setJsonPropertyFilter(new PropertyFilter() {
public boolean apply(Object object, String name, Object value) {
if(containsElement(properties,name)){
//System.out.println("-- "+name+"----");
return true;
}
return false;
}
});
}
return config;
}
private <T> boolean containsElement(List<T> list,Object object){
for(T l:list){
if(l.toString().equals(object.toString()) ){
return true;
}
}
return false;
}
// root List json, properties
private <T> String getJson(String root,List<T> list,List<String> properties){
JsonConfig config=jsonFilterProperty(properties);
JSONArray sentenceListJson=JSONArray.fromObject(list,config);
JSONObject jsonObject=new JSONObject();
jsonObject.put(root, sentenceListJson);
return jsonObject.toString();
}
// json
private <T> String printJson(String root,List<T> list,String className){
if(list==null) return null;
String resultJson = null;
if(list.size()>0){
List<String> properties=new ArrayList<String>();
if(className.equals("User")){
addProperty(properties,className);
}else if(className.equals("Sentence")){
addProperty(properties,className);
}else if(className.equals("Label")){
addProperty(properties,className);
}else if(className.equals("Attention")){
addProperty(properties,"User");
}else if(className.equals("Following")){
addProperty(properties,"User");
}else if(className.equals("SubscribeLabel")){
addProperty(properties,"Label");
addProperty(properties,"User");
}else if(className.equals("LoveSentence")){
addProperty(properties,"User");
addProperty(properties,"Sentence");
}
resultJson=getJson(root, list, properties);
System.out.println(resultJson);
}
return resultJson;
}
private void addProperty(List<String> properties,String className){
if(className.equals("User")){ // json User ,
properties.add("attentions");
properties.add("followings");
properties.add("friends");
properties.add("chats");
properties.add("notices");
properties.add("messages");
properties.add("sentences");
properties.add("receiveComments");
properties.add("sendComments");
properties.add("reportSentences");
properties.add("relatedSentences");
properties.add("loveSentences");
properties.add("labelUsers");
properties.add("subscribeLabels");
}else if(className.equals("Sentence")){// json Sentence ,
properties.add("author");
properties.add("comments");
properties.add("labelSentences");
}else if(className.equals("Label")){// json Label ,
properties.add("labelSentences");
properties.add("labelUsers");
properties.add("subscribeLabels");
}
}
이렇게 한 후에 호출 하면 Attention 이 json 으로 전환 하여 User 이후 에 순환 하지 않 게 할 수 있다.List<Attention> attentions=(List<Attention>) resultMap.get("ownPage_ownAttentionList");
printJson("attentionList", attentions, Attention.class.getSimpleName());
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.