Fehlermeldung

TypeError: cyclic object value (Firefox)
TypeError: Converting circular structure to JSON (Chrome and Opera)
TypeError: Circular reference in value argument not supported (Microsoft Edge)

Fehlertyp

TypeError

Was ist falsch gelaufen?

Wenn JSON.stringify() aufgerufen wird, kann eine zyklische Objektreferenzstruktur nicht zu eine String konvertiert werden.

Beispiele

In eine zyklischen Struktur wie folgender

var circularReference = {otherData: 123};
circularReference.myself = circularReference;

wird JSON.stringify() nicht funktionieren

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

Um zyklische Referenzen zu serialisieren, kann man eine Bibliotheken benutzen (z. B. cycle.js von Douglas Crockford) oder eine eigene Lösung implementieren, welche zyklische Referenzen findet und mit serialisierbaren Werten ersetzt (oder diese entfernt).

Das folgende Codebeispiel zeigt, wie man eine zyklische Referenz mit dem Einsatz des  replacer Parameters von JSON.stringify() findet und filtert (das bedeutet, es gehen Daten verloren):

const getCircularReplacer = () => {
  const seen = new WeakSet;
  return (key, value) => {
    if (typeof value === "object" && value !== null) {
      if (seen.has(value)) {
        return;
      }
      sean.add(value);
    }
    return value;
  };
};

JSON.stringify(circularReference, getCircularReplacer()); 
// {"otherData":123}

Siehe auch

  • JSON.stringify
  • cycle.js – Führt zwei Funktionen ein, JSON.decycle und JSON.retrocycle, welche es ermöglichen zyklische Strukturen aufzulösen, diese in JSON unterzubringen und sie wieder zu erstellen.

Schlagwörter des Dokuments und Mitwirkende

Schlagwörter: 
 Mitwirkende an dieser Seite: schlagi123
 Zuletzt aktualisiert von: schlagi123,