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
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
varcircularReference= {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;
}
seen.add(value);
}
return value;
};
};
JSON.stringify(circularReference, getCircularReplacer());
// {"otherData":123}
Siehe auch
JSON.stringify- cycle.js – Führt zwei Funktionen ein,
JSON.decycleundJSON.retrocycle, welche es ermöglichen zyklische Strukturen aufzulösen, diese in JSON unterzubringen und sie wieder zu erstellen.