Arrays 在写入.json文件之前,使用toJSON()从对象数组中过滤出循环引用
在写入.JSON文件之前,我正在对象数组上使用Arrays 在写入.json文件之前,使用toJSON()从对象数组中过滤出循环引用,arrays,node.js,json,Arrays,Node.js,Json,在写入.JSON文件之前,我正在对象数组上使用JSON.stringify()。我收到一个关于循环引用的错误 TypeError: Converting circular structure to JSON at JSON.stringify (<anonymous>) at TASKS.save (/home/yury.stanev/menlolab/runner/lib/tasks.js:89:27) at Timeout.setInterval [as
JSON.stringify()
。我收到一个关于循环引用的错误
TypeError: Converting circular structure to JSON
at JSON.stringify (<anonymous>)
at TASKS.save (/home/yury.stanev/menlolab/runner/lib/tasks.js:89:27)
at Timeout.setInterval [as _onTimeout] (/home/yury.stanev/menlolab/runner/lib/tasks.js:124:12)
at ontimeout (timers.js:436:11)
at tryOnTimeout (timers.js:300:5)
at listOnTimeout (timers.js:263:5)
at Timer.processTimers (timers.js:223:10)
解决此问题的最佳方法是什么?解决此问题的主要方法有两种:
一种是使用,它引入了两个函数,
JSON.decycle()
和JSON.retrocycle()
,这使得将循环结构和DAG编码和解码为扩展的、可追溯的JSON格式成为可能
或者,您可以实现自己的解决方案,该解决方案将需要通过可序列化的值查找和替换(或删除)循环引用 下面的代码片段演示了如何使用
JSON.stringify()
的replacer
参数查找和筛选循环引用(从而导致数据丢失):
请参阅以了解更多信息。解决此问题的主要方法有两种:
一种是使用,它引入了两个函数,
JSON.decycle()
和JSON.retrocycle()
,这使得将循环结构和DAG编码和解码为扩展的、可追溯的JSON格式成为可能
或者,您可以实现自己的解决方案,该解决方案将需要通过可序列化的值查找和替换(或删除)循环引用 下面的代码片段演示了如何使用
JSON.stringify()
的replacer
参数查找和筛选循环引用(从而导致数据丢失):
有关更多信息,请参阅
toJSON() {
const cleanObj = {};
for (const prop in this) {
if (this.hasOwnProperty(prop) && prop !== '_task' && prop !== '_handle') {
cleanObj[prop] = this[prop];
}
}
return cleanObj;
}
var circularReference = {otherData: 123};
circularReference.myself = circularReference;
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());