热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ConvertingcircularstructuretoJSON

2019独角兽企业重金招聘Python工程师标准TypeError:cyclicobjectvalue(Firefox)TypeError:Convertingcircula

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

TypeError: cyclic object value (Firefox) TypeError: Converting circular structure to JSON (Chrome and Opera) TypeError: Circular reference in value argument not supported (Edge)

什么问题?

该 JSON 格式本身不支持对象引用(虽然存在IETF草案),因此JSON.stringify()不会尝试解决这些问题,并相应地失败。

// Demo: Circular reference
var o = {};
o.o = o;// Note: cache should not be re-used by repeated calls to JSON.stringify.
var cache = [];
JSON.stringify(o, function(key, value) {if (typeof value === 'object' && value !== null) {if (cache.indexOf(value) !== -1) {// Duplicate reference foundtry {// If this value does not reference a parent it can be dedupedreturn JSON.parse(JSON.stringify(value));} catch (error) {// discard key if value cannot be dedupedreturn;}}// Store value in our collectioncache.push(value);}return value;
});
cache = null; // Enable garbage collection

最佳解决方案

var circularReference = {otherData: 123};
circularReference.myself = circularReference;

wrong examples

JSON.stringify(circularReference);
// TypeError: cyclic object value

要序列化循环引用,您可以使用支持它们的库(例如cycle.js)或自己实现解决方案,这需要通过可序列化的值查找和替换(或删除)循环引用。

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

参考:链接


转:https://my.oschina.net/johnsken/blog/1936515



推荐阅读
author-avatar
D3LJ664D5LJ81111
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有