MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-dev-survey

Message

TypeError: cyclic object value (Firefox)
TypeError: Converting circular structure to JSON (Chrome)

Type d'erreur

TypeError

Quel est le problème ?

Lorsqu'on appelle la méthode JSON.stringify(), les structures de références cycliques ne peuvent pas être converties en chaîne de caractères.

Exemples

Avec une structure circulaire comme la suivante :

var a = {};
var b = {}; 
a.child = b;
b.child = a;

JSON.stringify() échouera :

JSON.stringify(a);
// TypeError: cyclic object value

Il est nécessaire de contrôler l'existence de cycles avant la conversion en chaîne de caractères. On peut par exemple fournir une fonction de remplacement comme deuxièmee argument de la fonction JSON.stringify().

seen = []; 

var replacer = function(key, value) {
  if (value != null && typeof value == "object") {
    if (seen.indexOf(value) >= 0) {
      return;
    }
    seen.push(value);
  }
  return value;
};

JSON.stringify(a, replacer); 
// "{"child":{}}"

On peut également utiliser une bibliothèque ou une fonction utilitaire pour ce scénario. Douglas Crockford a par exemple écrit cycle.js.

Voir aussi

  • JSON.stringify
  • cycle.js qui introduit deux fonctions : JSON.decycle et JSON.retrocycle qui permettent d'encoder et de décoder des structures cycliques en JSON.

Étiquettes et contributeurs liés au document

Étiquettes : 
 Contributeurs à cette page : SphinxKnight
 Dernière mise à jour par : SphinxKnight,