TypeError: cyclic object value (Firefox) TypeError: Converting circular structure to JSON (Chrome)
When calling JSON.stringify() cyclic object reference structures can't be converted to a string.
In a circular structure like the following
var a = {};
var b = {};
a.child = b;
b.child = a;
JSON.stringify() will fail
JSON.stringify(a); // TypeError: cyclic object value
You will need to check for cyclic object references before stringifying. For example by specifying a replacer function as the second argument of JSON.stringify().
seen = [];
var replacer = function(key, value) {
if (value != null && typeof value == "object") {
if (seen.indexOf(value) >= 0) {
return;
}
seen.push(value);
}
return value;
};
JSON.stringify(a, replacer);
// "{"child":{}}" Or, you can use a library or utility functions that have already been written for this scenario. For example, there is cycle.js by Douglas Crockford.
JSON.stringifyJSON.decycle and JSON.retrocycle, which make it possible to encode cyclical structures and dags in JSON, and to then recover them.
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value