TypeError: cyclic object value
СообÑениÑ
TypeError: ÑиклиÑеÑкое знаÑение обÑекÑа (Firefox) TypeError: пÑеобÑазование кÑÑговой ÑÑÑÑкÑÑÑÑ Ð² JSON (Chrome и Opera) TypeError: ÑиклиÑеÑÐºÐ°Ñ ÑÑÑлка в аÑгÑменÑе знаÑÐµÐ½Ð¸Ñ Ð½Ðµ поддеÑживаеÑÑÑ (Edge)
Тип оÑибки?
TypeError
ЧÑо не Ñак?
Сам по Ñебе JSON-ÑоÑÐ¼Ð°Ñ Ð½Ðµ поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑÑÑлки на обÑекÑÑ (не ÑмоÑÑÑ Ð½Ð° Ñо ÑÑо ÑÑÑеÑÑвÑÐµÑ IETF, коÑоÑÑй позволÑÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ JSON ÑÑÑлаÑÑÑÑ Ð½Ð° дÑÑгое знаÑение в JSON-докÑменÑе), поÑÑÐ¾Ð¼Ñ JSON.stringify() не пÑÑаеÑÑÑÑ Ð¸Ñ
анализиÑоваÑÑ Ð¸ ÑеÑÐ¿Ð¸Ñ Ð½ÐµÑдаÑÑ Ð¿Ñи попÑÑке ÑделаÑÑ ÑÑо.
ÐÑимеÑÑ
РкÑÑговой ÑÑÑÑкÑÑÑе как ÑÑа
var circularReference = { otherData: 123 };
circularReference.myself = circularReference;
JSON.stringify() законÑиÑÑÑ Ð½ÐµÑдаÑей
JSON.stringify(circularReference);
// TypeError: ÑиклиÑеÑкое знаÑение обÑекÑа
ÐÐ»Ñ ÑеÑиализаÑии ÑиклиÑеÑÐºÐ¸Ñ ÑÑÑлок можно иÑполÑзоваÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑекÑ, коÑоÑÐ°Ñ Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ (напÑимеÑ, cycle.js) или ÑамоÑÑоÑÑелÑно ÑеализоваÑÑ ÑеÑение, коÑоÑое поÑÑебÑÐµÑ Ð¿Ð¾Ð¸Ñка и Ð·Ð°Ð¼ÐµÐ½Ñ (или ÑдалениÑ) ÑиклиÑеÑÐºÐ¸Ñ ÑÑÑлок ÑеÑиализÑемÑми знаÑениÑми.
Ðо ÑÑагменÑе кода ниже показано, как найÑи и оÑÑилÑÑÑоваÑÑ ÑиклиÑеÑкÑÑ ÑÑÑÐ»ÐºÑ (ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº поÑеÑе даннÑÑ
) Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð°ÑамеÑÑа replacerJSON.stringify():
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}
СмоÑÑиÑе Ñакже
JSON.stringify- cycle.js â Ð²Ð²Ð¾Ð´Ð¸Ñ Ð´Ð²Ðµ ÑÑнкÑии, JSON.decycle и JSON.retrocycle, ÑÑо даÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ декодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑиклиÑеÑÐºÐ¸Ñ ÑÑÑÑкÑÑÑ Ð¸ гÑÑпп обеÑпеÑÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑÑпноÑÑи баз даннÑÑ Ð² ÑаÑÑиÑеннÑй и обÑаÑно ÑовмеÑÑимÑй ÑоÑÐ¼Ð°Ñ JSON.