web-dev-qa-db-ja.com

円形構造をJSONに変換する-苦情のあるフィールドを見つける方法はありますか?

Chromeでオブジェクトを文字列化(...)しようとしていますが、(私が知る限り)そのような構造が存在しないという事実にもかかわらず、「JSONへの循環構造の変換」メッセージを取得し続けます。

私は何十回もコードを見てきましたが、どのような循環参照も見つけることができません。 Chromeを取得する方法はありますか?

35
Mike

これが明白すぎる場合はご容赦ください。この記事を書いている時点では、あなたが何を試したかわかりません。

インサート

_console.log(the object); 
_

「オブジェクト」をJSON.stringify()に渡すオブジェクトに置き換えます

_JSON.stringify_呼び出しの前にこの行を挿入します

そして、コンソールログ(シフトコントロールJ)でオブジェクトを探します。コンソールログでは、オブジェクトに「>」記号がタグ付けされ、クリックしてフィールドに展開できます。

この種のオブジェクトのように、それ自体へのポインタを持つオブジェクトについて不平を言っています:

_A = [];
A[0] = A; 
JSON.stringify(A); // circular error
_
32
Paul

dojox.json.refを使用して、循環参照を見つけることができます。このコードは、objectWithCircularReferencesのJSON表現を出力します。

require(["dojox/json/ref"], function(){
    console.log(dojox.json.ref.toJson(objectWithCircularReferences));
});

コンソールへの出力で「$ ref」サブストリングが発生すると、循環参照を見つけるのに役立ちます。必要に応じて、このjson出力を次のようにグローバル変数ZZZにパイプすることもできます。

require(["dojox/json/ref"], function(){
    window.ZZZ = dojox.json.ref.toJson(objectWithCircularReferences);
});

そしてもちろん、事前に道場ライブラリを含める必要があります。 htmlファイル内:

<script src="//yandex.st/dojo/1.9.1/dojo/dojo.js"></script>

Firebugコンソールで:

include("//yandex.st/dojo/1.9.1/dojo/dojo.js")

In Chrome console:

SCRIPT = document.createElement('script');
SCRIPT.src = '//yandex.st/dojo/1.9.1/dojo/dojo.js';
document.body.appendChild(SCRIPT);
2
user2683246