簡體   English   中英

為什么對象給出“未捕獲的TypeError:將圓形結構轉換為JSON”

[英]why the object gives “Uncaught TypeError: Converting circular structure to JSON”

這是我的示例數據對象

Object {map: Array[10], health: 100, ai: Array[4]}
ai: Array[4]
0: THREE.Object3D
1: THREE.Object3D
2: THREE.Object3D
3: THREE.Object3D
length: 4
__proto__: Array[0]
health: 100
map: Array[10]

無法找出為什么會給出此錯誤。

對象的屬性之一包含對對象本身的引用(或對子對象之一的遞歸引用)。 雖然這很好用,但將對象轉換為JSON會產生無限遞歸。

您可以使用dojox.json.ref查找循環引用。 這段代碼顯示了objectWithCircularReferences json表示objectWithCircularReferences

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

在控制台輸出中出現的“ $ ref”子字符串將幫助您找到循環引用。 如果願意,您也可以將此json輸出通過管道傳遞給全局變量ZZZ,如下所示:

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

當然,您需要事先包含dojo庫。 在html文件中:

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

在Firebug控制台中:

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

這是圓形參照物檢測器:

o = {a: 1, b:2, c:{d:3, e:4}, q:[1,2,3,4,5,{f:6,g:7}]}
o.o = o
console.log(o)
var done = []
function circRefDetec(o, path) {
   done.push(o)
   for (i in o) if (typeof o[i] == 'object') {
      if (done.indexOf(o[i]) >= 0) {
         console.log('CIRCULAR REFERECE DETECTED:', path +'.'+ i)
      } else {
         console.log(i, ':')
         circRefDetec(o[i], path +' '+ i)
      }
   }
}
circRefDetec(o, 'obj')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM