Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
TypeError: cyclic object value
Der JavaScript-Fehler "cyclic object value" tritt auf, wenn Objektverweise inJSON gefunden werden.JSON.stringify() versucht nicht, diese zu lösen, und scheitert entsprechend.
In diesem Artikel
Nachricht
TypeError: Converting circular structure to JSON (V8-based)TypeError: cyclic object value (Firefox)TypeError: JSON.stringify cannot serialize cyclic structures. (Safari)
Fehlerart
TypeErrorWas ist schiefgelaufen?
DasJSON-Format unterstützt an sich keine Objektverweise (obwohl einIETF-Draft existiert), daher versuchtJSON.stringify() nicht, sie zu lösen, und scheitert entsprechend.
Beispiele
>Zirkuläre Referenzen
In einer zirkulären Struktur wie der folgenden:
const circularReference = { otherData: 123 };circularReference.myself = circularReference;wirdJSON.stringify() fehlschlagen
JSON.stringify(circularReference);// TypeError: cyclic object valueUm zirkuläre Referenzen zu serialisieren, können Sie eine Bibliothek verwenden, die sie unterstützt (z.B.cycle.js) oder selbst eine Lösung implementieren, die das Finden und Ersetzen (oder Entfernen) der zyklischen Referenzen durch serialisierbare Werte erfordert.
Der folgende Codeausschnitt zeigt, wie man mit demreplacer-Parameter vonJSON.stringify() eine zyklische Referenz findet und filtert (was zu Datenverlust führt):
function getCircularReplacer() { const ancestors = []; return function (key, value) { if (typeof value !== "object" || value === null) { return value; } // `this` is the object that value is contained in, // i.e., its direct parent. while (ancestors.length > 0 && ancestors.at(-1) !== this) { ancestors.pop(); } if (ancestors.includes(value)) { return "[Circular]"; } ancestors.push(value); return value; };}JSON.stringify(circularReference, getCircularReplacer());// {"otherData":123,"myself":"[Circular]"}const o = {};const notCircularReference = [o, o];JSON.stringify(notCircularReference, getCircularReplacer());// [{},{}]Siehe auch
JSON.stringify()- cycle.js auf GitHub