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

标签 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 _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)

使用unil.inspect我找到了以下object的循环引用行37 。我正在尝试使用自定义 toJSON() 方法将其过滤掉。我不确定如何实际访问所需的属性来执行此操作。我的代码如下:

toJSON() {
    const cleanObj = {};
    for (const prop in this) {
      if (this.hasOwnProperty(prop) && prop !== '_task' && prop !== '_handle') {
        cleanObj[prop] = this[prop];
      }
    }
    return cleanObj;
  }

解决此问题的最佳方法是什么?

最佳答案

解决这个问题主要有两种方法:

<小时/>

一是使用cycle.js它引入了两个函数,JSON.decycle()JSON.retrocycle(),这使得将循环结构和 dags 编码和解码为扩展且向后兼容的 JSON 格式成为可能.

<小时/>

或者您可以实现自己的解决方案,该解决方案需要通过可序列化的值查找和替换(或删除)循环引用。

下面的代码片段说明了如何使用 JSON.stringify()replacer 参数查找和过滤(从而导致数据丢失)循环引用:

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());

请引用here了解更多信息。

关于arrays - 在写入 .json 文件之前使用 toJSON() 从对象数组中过滤掉循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57908529/

相关文章:

javascript - 在javascript中合并两个字典数组

node.js - 按日期范围查询 Sequelize 中的列字段

javascript - 使用 Node.js 回调的次数较少

javascript - 如何在 jquery 中组合两个函数?

javascript - 当我运行这段 JavaScript 代码来打印数组时,没有显示任何内容。这段代码有什么问题?

c++ - 数组 (C++) : why use pointers over direct manipulation?

node.js - zlib:zlib 绑定(bind)​​已关闭

java - 如何使用 @JsonProperty 检索子属性?

javascript - 从 .json url 提取数据导致 Jquery 出错

c++ - 分配对象数组动态卡住