[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.stringify
把state
数据转化成字符串然后存储到浏览器本地存储。
接下来就是解决,那就是解除循环引用,解除办法就是对组件中获取的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 --> starting at object with constructor 'Vue' | property '$options' -> 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 c
ircular 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:
TypeError:converting circular structure to json是一个常见的Python错误。它通常出现在将带有循环的数据结构转换为JSON格式时。比如,一个对象包含了自己,或一个对象引用了另一个对象的属性,而后者又引用了该对象本身,这就构成了一个循环引用。这时,Python会在转换成JSON格式时出错。
解决这个问题的方法有很多,具体可以根据实际情况选择。常见的方法包括以下几种:
1. 使用第三方模块
有许多第三方模块可以帮助我们解决这个问题,比如jsonpickle或simplejson。这些模块可以处理循环引用,把循环引用的对象序列化成JSON格式。
2. 手动处理循环引用
在不使用第三方模块的情况下,我们可以手动处理循环引用。将包含循环引用的对象转换成字典,把对象的id作为键值存储起来,递归遍历所有属性,并将对象的属性转换成字典格式。如果属性是一个对象,那么递归处理它,添加它的id到键值对中。处理完所有属性之后,可以将字典转换成JSON格式。
3. 更改数据结构
如果遇到循环引用的情况比较少,我们可以考虑修改数据结构。可以将循环引用的对象拆分成两个对象,并用一个id来链接它们。这样就可以序列化成JSON格式了。
4. 删除循环引用
如果循环引用不是必要的,我们也可以将其删除。比如,在构造对象时,我们可以避免引用该对象本身,或者在对象中删除自己的引用。这样就可以避免循环引用,从而避免了该错误。
总之,避免循环引用是避免该错误的关键。如果无法避免,就需要考虑采取上述方法来解决该问题。