2011-09-27 1 views
0

En essayant d'enregistrer des données sur le monde du jeu dans un fichier en utilisant JSON, je reçois cette bonne erreur de référence circulaire JSON. Y a-t-il un moyen de sauvegarder les types de données circulaires? Aussi, je cours ceci avec node.js, pas dans un navigateur.Puis-je en quelque sorte enregistrer des structures de données circulaires avec JSON ou quelque chose de similaire?

Fondamentalement, au fil du temps, le joueur obtient des unités. Ces unités sont sauvegardées dans une liste à l'intérieur de l'objet joueur, mais le joueur lui-même est considéré comme un argument, afin qu'il sache qui en est le propriétaire. Quelque chose comme ceci:

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

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

Vous ne pouvez pas sérialiser une référence circulaire, pouvez-vous référencer un identifiant à la place? – Joe

+1

Il existe des bibliothèques de sérialisation qui résolvent ce problème pour vous: https://github.com/douglascrockford/JSON-js – davin

+0

duplication possible de [Javascript: Comment enregistrer un objet avec des références circulaires?] (Http://stackoverflow.com/questions/7420597/javascript-comment-enregistrer-un-objet-avec-des-références-circulaires) – davin

Répondre

1

@Bane, en réponse à la façon d'inclure les cycle.js

le mettre dans votre dossier lib pour votre projet et l'inclurons via une balise de script si vous le faites du côté client. Sur le serveur, vous pouvez inclure le code dans le fichier dans lequel vous avez besoin de la référence circulaire; C'est simple mais vraiment la mauvaise façon de travailler. Mieux vaut le construire en tant que module, vérifiez this tutorial on howtonode.org pour les détails.

Votre meilleur pari global est de refactoriser de sorte que vous n'avez pas besoin de la référence circulaire.

+0

Merci beaucoup! – corazza

+0

Donc, l'idée de base est que je dois éditer le fichier cycle.js, en ajoutant le préfixe "export" à ces deux fonctions? – corazza

+1

Surtout, je n'ai pas vérifié le fichier cycle.js à fond, donc je ne suis pas sûr à 100% si cela dépend de quoi que ce soit d'autre. Mais sinon, oui essentiellement. En outre, il utilise jsonPath donc vous aurez envie de npm installer jsonpath [voici le git] (https://github.com/temsa/jsonpath) On dirait que ça marchera après ça. – Logos

Questions connexes