35

我正在尝试在 Chrome 中对对象进行字符串化(...),并且我不断收到“将循环结构转换为 JSON”消息,尽管事实上(据我所知)不存在这样的结构。

我已经检查了十几次代码,但找不到任何循环引用。除了这个痛苦无用的错误消息之外,有什么方法可以让 Chrome 告诉我它在抱怨什么?

4

2 回答 2

32

如果这太明显了,请原谅我。在撰写本文时,我不知道您尝试了什么。

插入

console.log(the object); 

用您传递给的对象替换“对象”JSON.stringify()

JSON.stringify在通话前插入这一行

并在控制台日志(班次控制 J)中查找该对象。在控制台日志中,对象将被标记为“>”符号,可以单击该符号以扩展字段。

它抱怨一个有指向自身的指针的对象,比如这种对象:

A = [];
A[0] = A; 
JSON.stringify(A); // circular error
于 2011-08-10T02:29:10.870 回答
2

您可以使用dojox.json.ref来查找循环引用。此代码打印您的 json 表示objectWithCircularReferences

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);
});

当然,您需要事先包含 dojo 库。在一个 html 文件中:

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

在萤火虫控制台中:

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

在 Chrome 控制台中:

SCRIPT = document.createElement('script');
SCRIPT.src = '//yandex.st/dojo/1.9.1/dojo/dojo.js';
document.body.appendChild(SCRIPT);
于 2013-10-23T16:38:54.467 回答