2011-09-27 3 views
0

JSON을 사용하여 파일에서 게임 세계에 대한 일부 데이터를 저장하려고하면 JSON 순환 참조 오류가 발생합니다. 순환 데이터 형식을 저장하는 방법이 있습니까? 또한 브라우저에서가 아니라 node.js를 실행하고 있습니다.JSON 또는 이와 유사한 원형 데이터 구조를 어떻게 든 저장할 수 있습니까?

기본적으로 시간이 지남에 따라 플레이어는 일부 유닛을 얻습니다. 이 유닛들은 플레이어 오브젝트 내부의리스트에 저장되지만, 플레이어 자신을 인수로 주므로 누가 자신의 소유자인지 알 수 있습니다. 이런 식으로 뭔가 :

Player = function() 
{ 
    this.power = 0 
    this.units = [new Unit(this)]; 
} 

Unit = function(owner) 
{ 
    owner.power++; 
} 
+0

순환 참조를 직렬화 할 수 없습니다. 대신 ID 대신 참조 할 수 있습니까? – Joe

+1

이 문제를 해결하는 직렬화 라이브러리가 있습니다. https://github.com/douglascrockford/JSON-js – davin

+0

가능한 복제본 [Javascript : 순환 참조가있는 개체를 저장하는 방법?] (http://stackoverflow.com)/questions/7420597/javascript-how-to-save-with-circular-references) – davin

답변

1

@Bane, 대답 당신이 그 일을하는 경우

스크립트 태그를 통해 프로젝트에 대한 귀하의 lib 폴더에 넣어 그것을 포함 cycle.js을 포함하는 방법에 클라이언트 쪽.

서버 측에서는 순환 참조가 필요한 파일에 코드를 포함 할 수 있습니다. 그건 간단하지만 실제로는 잘못된 길입니다. 더 좋은 방법은 모듈로 빌드하는 것입니다. 자세한 내용은 this tutorial on howtonode.org을 확인하십시오.

전반적인 최선의 방법은 순환 참조가 필요 없도록 리팩터링하는 것입니다.

+0

대단히 감사합니다! – corazza

+0

그래서, 기본 개념은 cycle.js 파일을 편집하여이 두 함수에 "내보내기"접두사를 추가해야한다는 것입니다. – corazza

+1

대부분, cycle.js 파일을 철저히 검사하지 않았으므로 다른 것에 의존한다면 100 % 확실하지는 않습니다. 하지만 그렇지 않으면 기본적으로 그렇습니다. 또한 jsonPath를 사용하므로 nson은 jsonpath를 설치해야합니다. [여기에 git이 있습니다.] (https://github.com/temsa/jsonpath) 그 후에 작동 할 것 같습니다. – Logos

관련 문제