序列化包含循环对象值的对象
-
28-10-2019 - |
题
我有一个对象(解析树),其中包含子节点,这些子节点是对其他节点的引用。
我想使用JSON.stringify()
序列化此对象,但是我得到
TypeError:循环对象值
因为我提到的结构。
我该如何解决?对我来说,这些对其他节点的引用是否在序列化对象中表示,对我来说都没有关系。
另一方面,在创建对象时从对象中删除这些属性似乎很繁琐,而且我不想更改解析器(水仙)。
解决方案
使用stringify
的第二个参数替换功能,以排除已经序列化的对象:
通用标签
正如其他注释中正确指出的那样,此代码删除了每个“可见”对象,而不仅仅是“递归”对象。
例如,对于: 通用标签
结果将不正确。如果您的结构是这样的,则可能要使用Crockford的循环 a>或这个(简单的)函数,它将递归引用替换为null:
其他提示
我创建了一个GitHub Gist,它能够检测循环结构并对其进行反编码并进行编码:https://gist.github.com/Hoff97/9842228
要进行转换,只需使用JSONE.stringify / JSONE.parse。 它还对功能进行解编码。如果要禁用此功能,只需删除第32-48和61-85行即可。 通用标签
您可以在此处找到一个小提琴示例:
大量保护程序,它显示了 cycle 对象的位置。 通用标签
产生 通用标签
缺少先决条件,否则数组对象中的整数值将被截断,即[[08.11.2014 12:30:13,1095]] 1095减少为095。
我也创建了一个github项目,该项目可以序列化循环对象并还原类(如果将其保存在String之类的serializename属性中) 通用标签
https://github.com/bormat/serializeStringifyParseCyclicObject
编辑: 我已经为NPM转换了脚本, https://github.com/bormat/borto_circular_serialize 函数名称从法语到英语。