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