35 votes

Conversion d'une structure circulaire en JSON -- Comment savoir de quel champ il s'agit ?

J'essaie de stringifier(...) un objet dans Chrome, et je continue à obtenir un message "Converting circular structure to JSON", malgré le fait que (pour autant que je sache) une telle structure n'existe pas.

J'ai parcouru le code une douzaine de fois et je n'ai trouvé aucune référence circulaire. Existe-t-il un moyen de faire en sorte que Chrome me dise ce qu'il râle ?

32voto

Paul Points 5437

Pardonnez-moi si c'est trop évident. Au moment où j'écris ces lignes, je ne sais pas ce que vous avez essayé.

insérer

console.log(the object); 

en remplaçant "l'objet" par l'objet auquel vous passez JSON.stringify()

insérer cette ligne avant le JSON.stringify appel

et recherchez l'objet dans le journal de la console (shift control J). Dans le journal de la console, l'objet sera marqué d'un symbole ">" sur lequel vous pouvez cliquer pour développer les champs.

Il se plaint d'un objet qui possède des pointeurs sur lui-même, comme ce type d'objet :

A = [];
A[0] = A; 
JSON.stringify(A); // circular error

2voto

user2683246 Points 101

Vous pouvez utiliser dojox.json.ref pour trouver des références circulaires. Ce code imprime une 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 vers la console vous aidera à localiser les références circulaires. Vous pouvez également diriger 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);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X