2014-05-19 1 views
0

JSON.stringify 메서드를 사용하여 개체를 문자열로 변환하려고했지만 순환 참조 예외가 발생했습니다.JSON.stringify 메서드의 순환 참조 예외

다음 scenorio와 같은 코드 스 니펫을 사용하고 있습니다.

var john = new Object(); 
var mary = new Object(); 
john.sister = mary; 
mary.brother = john; 

// This line causes a runtime error. 
var error = JSON.stringify(john); 

링크에서 참조 링크

http://msdn.microsoft.com/en-us/library/ie/cc836474(v=vs.94).aspx

로 privided 용액 순환 참조를 제거한다. 하지만 경우에 위의 코드 스 니펫을 사용하고 싶습니다. 이 문제를 해결할 다른 방법이 있습니까?

+0

결과가 정확히 무엇을 원하겠습니까? 무한히 긴 JSON 문자열? 직렬화이므로 객체에 대한 참조를 전달할 수는 없습니다. –

+3

순환 참조로 무언가를 직렬화하는 것은 논리적으로 불가능합니다. 참조를 제거하는 것이 유일한 해결책입니다. – techfoobar

답변

2

위 코드는 교착 상태에 개체를 추가하는 것입니다 (John이 Mary를 기다리고 Mary가 John을 기다리고 있다고 가정). 그래서 직렬화하려고 할 때 순환 종속성 오류를 보여줍니다. 시나리오 위

양방향 relationships.You를 작성하는 부모/자식으로 가능한 한 depadancy의 참조를 제거해야 할 것 같다되지 않습니다

이제
+0

교착 상태가 발생 했습니까? 기다리는? –

+0

더 나은 이해를위한 가정 –

0
var peoples=[],person={}; 
person['name']='Adam'; 
person['sex']=1; 
person['generation']=0; 
person['tree']=[0,2,4]; 
peoples[peoples.length]=person; 

person={}; 
person['name']='Eve'; 
person['sex']=2; 
person['generation']=0; 
person['tree']=0; 
peoples[peoples.length]=person; 

당신은 SQL 데이터와 같은 객체의 배열을 가지고 베이스.아담은 사람들과 결혼하고 [2] 새로운 나무를 짓습니다. 4. 아담과 이브는 세대가 같고 나무 수가 동일하기 때문에 형제입니다. 근친상간을 올렸지 만 주위에는 방법이 없었습니다.