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?
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
, 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);