循環オブジェクト値を含むオブジェクトのシリアル化
-
28-10-2019 - |
質問
他のノードへの参照である子ノードを含むオブジェクト(解析ツリー)があります。
JSON.stringify()
を使用してこのオブジェクトをシリアル化したいのですが、
TypeError:循環オブジェクト値
私が言及した構成のため。
どうすればこれを回避できますか?他のノードへのこれらの参照がシリアル化されたオブジェクトで表されているかどうかは私には関係ありません。
一方、作成時にこれらのプロパティをオブジェクトから削除するのは面倒なようで、パーサー(水仙)に変更を加えたくありません。
解決
stringify
の2番目のパラメーターである
他のコメントで正しく指摘されているように、このコードは「再帰的」オブジェクトだけでなく、すべての「見られた」オブジェクトを削除します。
たとえば、次の場合: ジェネラコディセタグプレ
結果は正しくありません。構造がこのような場合は、Crockfordのサイクルまたは再帰参照をnullに置き換えるだけのこの(より単純な)関数:
他のヒント
循環構造を検出し、それらをデコードしてエンコードできるGitHub Gistを作成しました:https://gist.github.com/Hoff97/9842228
変換するには、JSONE.stringify /JSONE.parseを使用します。 また、関数のデコードとエンコードも行います。これを無効にする場合は、32〜48行目と61〜85行目を削除してください。 ジェネラコディセタグプレ
ここでフィドルの例を見つけることができます:
はるかに節約でき、サイクルオブジェクトがどこにあったかを示します。 ジェネラコディセタグプレ
プロデュース ジェネラコディセタグプレ
前提条件がありませんでした。そうでない場合、配列オブジェクトの整数値が切り捨てられます。つまり、[[08.11.2014 12:30:13、1095]] 1095が095に減少します。
文字列のようにserializename属性に保存すると、循環オブジェクトをシリアル化してクラスを復元できるgithubプロジェクトも作成します ジェネラコディセタグプレ
https://github.com/bormat/serializeStringifyParseCyclicObject
編集: NPM https://github.com/bormat/borto_circular_serialize のスクリプトを変換し、変更しましたフランス語から英語までの関数名。