TypeError: cyclic object value
JavaScript ã®ä¾å¤ "cyclic object value" ã¯ã JSON ã®ä¸ã«ãªãã¸ã§ã¯ãã®åç
§ãè¦ã¤ãã£ãã¨ãã«çºçãã¾ãã JSON.stringify() ã¯ããã解決ãããã¨ãããããã«ãã£ã¦å¤±æãã¾ãã
ã¨ã©ã¼ã¡ãã»ã¼ã¸
TypeError: Converting circular structure to JSON (V8-based) TypeError: cyclic object value (Firefox) TypeError: JSON.stringify cannot serialize cyclic structures. (Safari)
ã¨ã©ã¼ã®ç¨®é¡
TypeError
ã¨ã©ã¼ã®åå
JSON å½¢å¼ã¯ãªãã¸ã§ã¯ãåç
§ã«å¯¾å¿ãã¦ãã¾ãã (IETF ã®èæ¡ã¯ããã¾ãã)ããããã£ã¦ JSON.stringify() ã¯ããã解決ãããã¨ãããããã«ãã£ã¦å¤±æãã¾ãã
ä¾
>循ç°åç §
次ã®ãããªå¾ªç°æ§é ä½ã§ã¯ã
const circularReference = { otherData: 123 };
circularReference.myself = circularReference;
JSON.stringify() ã¯å¤±æãã¾ãã
JSON.stringify(circularReference);
// TypeError: cyclic object value
循ç°åç §ãã·ãªã¢ã©ã¤ãºããã«ã¯ãããã«å¯¾å¿ããã©ã¤ãã©ãª (ä¾ãã° cycle.js) ã使ç¨ããããèªåèªèº«ã§å¾ªç°åç §ãæ¢ãã¦ã·ãªã¢ã©ã¤ãºå¯è½ãªå¤ã«ç½®ãæãã (ã¾ãã¯åé¤ãã) ãã¨ãæ±ãã解決çãå®è£ ãããã¨ãã§ãã¾ãã
次ã®ã¹ããããã¯ã JSON.stringify() ã® replacer 弿°ã使ç¨ãã¦å¾ªç°åç
§ãæ¤ç´¢ãã¦ãã£ã«ã¿ãªã³ã°ããæ¹æ³ã示ãã¦ãã¾ã (ããã«ãããã¼ã¿æå¤±ãçºçãã¾ã)ã
function getCircularReplacer() {
const ancestors = [];
return function (key, value) {
if (typeof value !== "object" || value === null) {
return value;
}
// `this` ã¯ããã®å¤ãå«ã¾ãã¦ãããªãã¸ã§ã¯ãã§ãã
// ããªãã¡ãç´æ¥ã®è¦ªã§ãã
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());
// [{},{}]
é¢é£æ å ±
JSON.stringify()- cycle.js â GitHub ä¸