Arrays 在写入.json文件之前,使用toJSON()从对象数组中过滤出循环引用

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文件之前,我正在对象数组上使用
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());