Convertir la structure circulaire en JSON - un moyen de trouver quel champ il se plaint?

J'essaie de stringifier(...) un objet dans Chrome, et je continue à recevoir un message "conversion de structure circulaire en JSON", malgré le fait que (pour autant que je sache) aucune structure de ce type n'existe.

J'ai passé le code une douzaine de fois et je ne trouve aucune référence circulaire. Est - il possible D'obtenir Chrome pour me dire ce qu'il râle au-delà de ce message d'erreur douloureusement inutile?

35
demandé sur Mike 2011-08-10 06:21:34

2 réponses

Pardonnez-moi si cela est trop évident. Au moment d'écrire ces lignes, Je ne sais pas ce que vous avez essayé.

{Insérer[5]}

console.log(the object); 

Remplacer 'l'objet' par l'objet que vous passez à JSON.stringify()

Insérez cette ligne avant l'appel JSON.stringify

Et regardez dans le journal de la console (shift control J) pour l'objet. Dans le journal de la console, l'objet sera marqué avec un symbole " > " qui peut être cliqué pour se développer dans les champs.

Il se plaint d'un objet qui a des pointeurs en soi, comme ce genre d'objet:

A = [];
A[0] = A; 
JSON.stringify(A); // circular error
31
répondu Paul 2016-02-14 04:49:15

, Vous pouvez utiliser dojox.json.ref trouver des références circulaires. Ce code imprime la représentation json de votre objectWithCircularReferences:

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

Toute occurrence de la sous-chaîne" $ref " dans sa sortie à la console vous aidera à localiser les références circulaires. Vous pouvez également rediriger cette sortie json vers la variable globale ZZZ comme ceci si vous le souhaitez:

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

Et bien sûr, vous devez inclure la bibliothèque dojo au préalable. Dans un fichier html:

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

Dans la console firebug:

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

Dans la console Chrome:

SCRIPT = document.createElement('script');
SCRIPT.src = '//yandex.st/dojo/1.9.1/dojo/dojo.js';
document.body.appendChild(SCRIPT);
2
répondu user2683246 2015-01-30 18:16:27