Hermes引擎报TypeError:JSON对象存在循环结构问题求助
解决Hermes引擎下"cyclical structure in JSON object"错误
错误现象
TypeError: cyclical structure in JSON object, js engine: hermes
输入文本为null时程序正常运行,输入非空文本时触发上述错误
问题原因
这个错误的核心是你尝试序列化的对象存在循环引用——比如对象的某个属性直接/间接引用了自身(比如obj.a = obj),或者两个对象互相引用(obj1.b = obj2; obj2.a = obj1)。当输入非空文本时,你的代码会触发这个带循环引用对象的序列化流程;而输入null时没有走到这一步,所以不会报错。
解决方案
1. 手动清理循环引用
定位到要序列化的目标对象,找到循环引用的属性,将其替换为非引用类型的值(比如只保留ID、名称等基础属性),或者直接移除不需要的引用属性。
2. 用自定义replacer函数处理
给JSON.stringify()传入自定义的replacer函数,自动跳过循环引用:
const stringifyWithoutCycle = (obj) => { const seen = new WeakSet(); return JSON.stringify(obj, (key, value) => { if (typeof value === 'object' && value !== null) { if (seen.has(value)) { return undefined; // 跳过已处理的循环引用对象 } seen.add(value); } return value; }); }; // 使用示例 const safeJson = stringifyWithoutCycle(yourTargetObject);
3. 排查输入关联逻辑
检查非空文本输入时的代码流程,确认是否不小心将DOM元素、类实例(通常带有内部循环引用)或其他复杂对象混入了要序列化的内容中。比如如果你的代码把输入文本和某个组件实例绑定后进行序列化,就会因为组件实例的内部引用导致报错。
内容的提问来源于stack exchange,提问作者Thenuja Hansidu Hettiarachchi
相关产品推荐
相关产品推荐

