TypeError: cyclic object value
The JavaScript exception "cyclic object value" occurs when object references were foundinJSON.JSON.stringify() doesn't tryto solve them and fails accordingly.
In this article
Message
TypeError: Converting circular structure to JSON (V8-based)TypeError: cyclic object value (Firefox)TypeError: JSON.stringify cannot serialize cyclic structures. (Safari)
Error type
TypeErrorWhat went wrong?
TheJSON format per se doesn't support objectreferences (although anIETF draft exists),henceJSON.stringify() doesn't try to solve them and fails accordingly.
Examples
>Circular references
In a circular structure like the following:
const circularReference = { otherData: 123 };circularReference.myself = circularReference;JSON.stringify() will fail
JSON.stringify(circularReference);// TypeError: cyclic object valueTo serialize circular references you can use a library that supports them (e.g.,cycle.js)or implement a solution by yourself, which will require finding and replacing (orremoving) the cyclic references by serializable values.
The snippet below illustrates how to find and filter (thus causing data loss) a cyclicreference by using thereplacer parameter ofJSON.stringify():
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());// [{},{}]See also
JSON.stringify()- cycle.js on GitHub