2011-09-27 68 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-an-object-with-circular-references) – davin

回答

1

@Bane,在回答如何包含cycle.js

把它放在你的lib文件夾爲您的項目,包括它通過腳本標籤,如果你這樣做在客戶端。

在服務器端,您可以將代碼包含在需要循環引用的文件中;這很簡單,但真的是錯誤的工作方式。最好的辦法是把它作爲一個模塊構建出來,查詢具體細節this tutorial on howtonode.org

您的整體最好的選擇雖然是重構,所以你不需要循環引用。

+0

非常感謝! – corazza

+0

所以,基本的想法是我必須編輯cycle.js文件,爲這兩個函數添加「導出」前綴? – corazza

+1

大部分情況下,我沒有徹底檢查cycle.js文件,因此我不能100%確定它是否取決於其他任何內容。但否則,基本上是。此外,它使用jsonPath,所以你會想npm安裝jsonpath [這裏是git](https://github.com/temsa/jsonpath)看起來它會在那之後工作。 – Logos

相關問題