添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
[Vue warn]: Error in nextTick: "TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'Vue'
    |     property '$options' -> object with constructor 'Object'
    |     property 'router' -> object with constructor 'VueRouter'
    --- property 'app' closes the circle"

一般报错TypeError: Converting circular structure to JSON是因为存在循环引用,并且使用JSON.stringify方法去转化成字符串。下面举一个简单地例子:

  • 报错代码

    const x = { a: 8 };
    const b = { x };
    b.y = b; // 循环引用
    JSON.stringify(b); // 触发报错
    
  • 解决

    const x = { a: 8 };
    const b = { x };
    b.y = JSON.parse(JSON.stringify(b)); // 隐式深拷贝,主要实现深拷贝,解除循环引用
    JSON.stringify(b);
    

    也可以不使用深拷贝,直接去掉循环引用的代码,问题的关键点是解除循环引用

  • 本博文报错位置不能显式看到循环引用,因为循环引用的代码不是自己写的,而是框架代码自己实现的,因此发现问题的产生地方更难一点。经过大约一下午时间头都快爆炸了,终于看到了黎明曙光。发现产生问题的原因:

    • vuex中的状态管理state中存储了router实例(组件中获取的this.$route),存在循环引用
    • vuex使用了插件vuex-persistedstate

    state中有了循环引用,插件vuex-persistedstate要执行JSON.stringifystate数据转化成字符串然后存储到浏览器本地存储。

    接下来就是解决,那就是解除循环引用,解除办法就是对组件中获取的this.$route进行深拷贝,然后再存储到state

    /**
     * 获取数据类型
     * @param {All} [o] 需要检测的数据
     * @returns {String}
    export function getType(o){
      return Object.prototype.toString.call(o).slice(8,-1);
     * 判断是否是指定数据类型
     * @param {All} [o] 需要检测的数据
     * @param {String} [type] 数据类型
     * @returns {Boolean}
    export function isKeyType(o, type) {
    	return getType(o).toLowerCase() === type.toLowerCase();
     * 深拷贝,支持常见类型 object Date Array等引用类型
     * @param {Any} sth
     * @return {Any}
    export function deepClone(sth) {
      let copy;
      if (null == sth || "object" != typeof sth) return sth;
      if (isKeyType(sth, 'date')) {
        copy = new Date();
        copy.setTime(sth.getTime());
        return copy;
      if (isKeyType(sth, 'array')) {
        copy = [];
        for (let i = 0, len = sth.length; i < len; i++) {
          copy[i] = deepClone(sth[i]);
        return copy;
      if (isKeyType(sth, 'object')) {
        copy = {};
        for (let attr in sth) {
          if (sth.hasOwnProperty(attr)) copy[attr] = deepClone(sth[attr]);
        return copy;
      return null;
    

    深拷贝源码此项目包含很多前端通用方法。

报错:[Vue warn]: Error in nextTick: "TypeError: Converting circular structure to JSON --&gt; starting at object with constructor 'Vue' | property '$options' -&gt; object with constructor 'O...
Traceback (most recent call last): File "C:/Users/Lenovo/PycharmProjects/untitled3/text6.py", line 49, in printGoodsList(infoList) 序号 价格 商品名称 File "C:/Users/Lenovo/PycharmProjects/untitled3/text6.py", line 34, in printGoodsList print(tplt.format(count, g[0], g[1])) 1 199.00
在使用JSON.stringify方法去转化成字符串,会报错TypeError: Converting circular structure to JSON 原因: 对象中有对自身的循环引用; let test = { a: 1, b: 2 }; test.c = test; // 循环引用 JSON.stringify(test); // 报错 解决方法: 下面的 json_str 就是JSON.stringify 转换后的字符串 var cache = []; var json_str =
今天把最近一直在开发的小程序放安卓手机上测试一下,结果某个页面就一直报错: Uncaught TypeError: Converting circular structure to JSON 先说一下基本的环境: 系统:Android 6.0.1 手机:小米4 微信版本:6.6.6 小程序基于mpvue开发 在看到这个错误的时候,明白导致的原因应该是因为一个对象里面有循环引用,然后这个对象不幸的被JSON.stringify给调用了 可是这个有循环引用的对象在哪就不清楚了。 一开始想的是vue对象的data,因为小程序里面,jscore会把这个data stringify之后发送给webvie
1.业务需求: vue项目使用el-tree组件时需要将树形的某一个node对象存储起来,存储的时候需要使用JSON对象来转换为字符串的形式,此时出现Converting circular structure to JSON报错,JSON转换失败。 2.解决方案: 在网上查找了资料,这个错误其实是因为被JSON转化的对象里的子项存在循环引用,JSON转化时其实也是一个深度拷贝的过程,但是存在循环引用的对象,
Converting circular structure to JSON 这个问题是因为对象嵌套深度超过系统,一般都是对象相互引用 json转译为字符串,就一直循环下去。 这个是因为js对json对象赋值其实是地址的复制,就会导致这个问题 当然,如果不注意对象的操作,还可能会导致,删除等误操作。 支持任何html组件和vue项目中引用的组件进行渲染,支持组件任何属性 支持将json数据特殊对象转换成数据关联关系实现联动 支持二次开发json属性解析方式,数据交互来源与渲染逻辑 此项目安装依赖 npm install npm run dev yarn install yarn run dev 使用npm安装 npm i @json2render/vue-full 实现一个简单示例 main.js import { createApp } from 'vue' import App from './App.vue' import JRender from '@json2render/vue-full'
### 回答1: 这个错误是因为在尝试将一个循环结构转换为 JSON 格式时出现了问题。循环结构指的是对象或数组中包含了循环引用的情况,例如对象 A 中包含了对象 B,而对象 B 又包含了对象 A。这种情况下,JSON 序列化会陷入死循环,无法完成转换。 解决这个问题的方法是避免循环引用,或者使用第三方库来处理循环引用的情况。例如,可以使用 `json-circular-stringify` 库来序列化包含循环引用的对象。 ### 回答2: 在进行 JavaScript 开发时,我们经常会遇到 JSON 序列化的需求,比如将 JavaScript 对象转换为 JSON 格式。但是,有时候当我们尝试对一个JavaScript对象进行 JSON 序列化时,会出现“TypeError: Converting circular structure to JSON” 的错误。这个错误通常是由于对象中包含了循环引用或嵌套引用导致的。 简单来说,当我们尝试将一个包含循环引用的 JavaScript 对象进行 JSON 序列化时,就会出现这个错误。循环引用指的是一个对象中包含了对自身或其他对象的引用,从而形成了循环依赖的关系。因为 JSON 是一种无法表示循环引用的数据格式,因此在序列化循环引用对象时,就会出现这个错误。 为了解决这个问题,我们需要使用一些技巧来避免循环依赖。一种解决方案是使用 JSON.stringify() 函数提供的 replacer 函数参数来过滤掉循环引用的属性。具体做法是在 replacer 函数中判断当前属性是否已经被序列化过,如果是则返回 undefined,否则继续进行序列化。 另一种解决方案是使用第三方库,例如 lodash 或 augment。这些库可以帮助我们避免循环引用的问题,同时提供了更强大的序列化功能和更丰富的选项配置。 总之,在进行 JavaScript 对象的 JSON 序列化时,一旦出现“TypeError: Converting circular structure to JSON” 的错误,我们需要先检查对象是否存在循环引用,并尝试使用上述方法进行处理,以免造成不必要的麻烦。 ### 回答3: TypeErrorconverting circular structure to json是一个常见的Python错误。它通常出现在将带有循环的数据结构转换为JSON格式时。比如,一个对象包含了自己,或一个对象引用了另一个对象的属性,而后者又引用了该对象本身,这就构成了一个循环引用。这时,Python会在转换成JSON格式时出错。 解决这个问题的方法有很多,具体可以根据实际情况选择。常见的方法包括以下几种: 1. 使用第三方模块 有许多第三方模块可以帮助我们解决这个问题,比如jsonpickle或simplejson。这些模块可以处理循环引用,把循环引用的对象序列化成JSON格式。 2. 手动处理循环引用 在不使用第三方模块的情况下,我们可以手动处理循环引用。将包含循环引用的对象转换成字典,把对象的id作为键值存储起来,递归遍历所有属性,并将对象的属性转换成字典格式。如果属性是一个对象,那么递归处理它,添加它的id到键值对中。处理完所有属性之后,可以将字典转换成JSON格式。 3. 更改数据结构 如果遇到循环引用的情况比较少,我们可以考虑修改数据结构。可以将循环引用的对象拆分成两个对象,并用一个id来链接它们。这样就可以序列化成JSON格式了。 4. 删除循环引用 如果循环引用不是必要的,我们也可以将其删除。比如,在构造对象时,我们可以避免引用该对象本身,或者在对象中删除自己的引用。这样就可以避免循环引用,从而避免了该错误。 总之,避免循环引用是避免该错误的关键。如果无法避免,就需要考虑采取上述方法来解决该问题。